React之 常见的hooks
前面是类组件,今天是函数式组件
函数式组件的特点
没有状态
没有生命周期
没有this
useState
src>index.js
import React from 'react'
import { createRoot } from 'react-dom/client'
import './css/common.css' //引入公共样式
import App1 from './App1' //引入模块const root = createRoot(document.getElementById('root'))
root.render(<div><App1/></div>
)
src>css>common.css 公共样式文件
*{padding:0;margin:0;list-style:none;
}
src>App1.js
import React, { useState } from 'react'
function App1() {//useState(0)中的0是num的初始值,后面修改num的值需要通过setNumconst [num, setNum] = useState(0)return (<div><h3>num: {num}</h3></div>)
}
*注意,Hooks的API只能在函数内的最外层声明
if(true){const [num, setNum] = useState(0)
}
//报错,不能写在条件判断语句中
useEffect
将App1改为
import React, { useState, useEffect } from 'react'
function App1() {// useState(0) 中的0是num的初始值const [num, setNum] = useState(0)const [num1, setNum1] = useState(0)// 检测视图更新useEffect(() => {console.log('useEffect,视图更新了');},[num])//1 相当于componentDidMount:// 第一次挂载一定会打印一次//2 相当于componentDidUpdate:// 回调的数组不写,默认所有数据更新都会打印// 回调的数组写了对应的变量,则变量改变才打印// 回调的数组为空,则·不检测更新return (<div>App1<h3>num: {num}</h3><button onClick={() => setNum(num + 1)}>累加</button><h3>num1: {num1}</h3><button onClick={() => setNum1(num1 + 1)}>累加</button></div>)
}
export default App1
useReducer 和useRef
类似于redux
src>App2.js:
import React, { useRef, useReducer } from 'react'
import './css/app2.css'
// 1、定义一个reducer
function texReducer(state, action) {let newState = JSON.parse(JSON.stringify(state))switch (action.type) {case 'change_fn':newState.texVal = action.valuereturn newStatecase 'publish_fn':if (action.value) {newState.list.unshift(action.value)newState.texVal = '' //数据初始化} else {alert('请输入非空的内容')}return newStatecase 'del_fn':newState.list.splice(action.value, 1)return newStatedefault:break}
}function App2() {// 2、使用reducer并解构出state与dispatch, { texVal: '写点什么', list: [] }表示state的默认数据const [state, dispatch] = useReducer(texReducer, { texVal: '写点什么', list: [] })// 3.useRef获取元素const element = useRef(null)const changeFn = () => {// 4.current指向ref挂载的dom元素console.log(element.current.value);// 5.dispatch调用 dispatch({ type: 'change_fn', value: element.current.value })}const publishFn =() => { dispatch({ type: 'publish_fn', value: state.texVal }) }return (<div className="box"><div className='txtbox'><div className='title'>有什么新鲜事想告诉大家?</div><textarea name="" id="txta" ref={element} cols="30" rows="10" placeholder='请在此输入内容' value={state.texVal}onChange={changeFn}></textarea><div className='foot'><div></div><div className='btn' onClick={publishFn}>发布</div></div></div><ul className="content">{state.list.map((item, index) => {return <li key={index} className='foot'><div className='li-con'>{item}</div> <div className='btn' onClick={() => { dispatch({ type: 'del_fn', value: index }) }}>删除</div></li>})}</ul></div>)}
export default App2
记得在index.js引入组件App2
src>css>app2.css 样式文件
html {background-color: #eee;
}.title {color: #333;height: 50px;line-height: 50px;
}.box {width: 100%;height: 100%;}.txtbox {background-color: #fff;width: 800px;padding: 10px;margin: 100px auto 10px;
}#txta {width: 800px;height: 100px;box-sizing: border-box;border: 1px solid #ccc;outline-color: #ff8140;padding: 8px;}.content {width: 800px;padding: 10px;margin: 0 auto;background-color: #fff;
}.foot {display: flex;justify-content: space-between;height: 40px;}.btn {width: 10%;text-align: center;height: 28px;line-height: 28px;margin: 6px 0;background-color: #ff8140;border-radius: 4px;color: #fff;}ul li {height: 50px;line-height: 50px;border-bottom: 1px solid #999;
}.li-con {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 90%;}
React之 常见的hooks相关推荐
- react以及常见前端面试题(看这一篇就够了)持续更新中...
目录 1.说说对React的理解?有哪些特性? 2.说说Real diff算法是怎么运作的? 3. 说说React生命周期有哪些不同的阶段?每个阶段对应的方法是? 4.说说你对React中虚拟dom的 ...
- [react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景?
[react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景? 在 React 中使用 class 继承 React.Component,就可以在类里面使用各种各样的钩子函数,比如 ...
- react dispatch_React系列自定义Hooks很简单
React系列-Mixin.HOC.Render Props(上) React系列-轻松学会Hooks(中) React系列-自定义Hooks很简单(下) 我们在第二篇文章中介绍了一些常用的hooks ...
- 使用react实现select_使用 Hooks 优化 React 组件
奇技指南 本文内容主要是我之前分享的文字版,若想看重点的话可以看之前的Slide: https://ppt.baomitu.com/d/75fc979a 本文作者奇舞团前端开发工程师李喆明. 需求描述 ...
- 拯救react的hooks:react的问题和hooks的作用
react组件和react组件逻辑复用 react是一个视图层组件方案,最核心的功能就是绑定视图与数据和逻辑,实现响应式的渲染.react的组件最核心的就是渲染出的Vdom,也就是jsx的部分. 渲染 ...
- 浅谈:为什么vue和react都选择了Hooks?
一.hooks: 什么叫大势所趋? 2019年年初,react 在 16.8.x 版本正式具备了 hooks 能力. 2019年6月,尤雨溪在 vue/github-issues 里提出了关于 vue ...
- React 生命周期、Hooks
React React 生命周期 Hooks Hook 的特点 Effect Hook 自定义 hooks React 生命周期 react 生命周期是组件实例从创建运行到销毁的一系列过程 compo ...
- [译] How to NOT React:React 中常见的反模式与陷阱
原文地址:How to NOT React: Common Anti-Patterns and Gotchas in React 原文作者:NeONBRAND 译文出自:掘金翻译计划 本文永久链接:g ...
- React 父组件(hooks)调用子组件(calss)方法
父组件(hooks) let richTextRef = {};<RichText getRichText={getRichText} content={content} onRef={ref ...
最新文章
- new char[x]和new char(x)的差别
- Docker 安装JDK1.8
- 你只管打开清华小姐姐总结的Python学习知识手册 ,剩下的交给「卧槽」
- bzoj3456: 城市规划
- javascript调试常用工具讲解
- 整理一篇Linux drm显示系统的文章
- 参数化登陆防止SQL注入攻击
- 三菱M80操作介绍_共享屋:三菱M70 PLC 转M80操作步骤
- nedc和epa续航里程什么意思_了解 NEDC 之后 我发现电动车的续航还是得实测
- 老李分享:HTTP协议之协议头
- Cache计算的再总结
- Java 集合处理/ 空值处理/ 异常处理,使用心得分享!
- 使用JMH做Java微基准测试(一)测试入门
- PS打开PSD文档服务器未响应,ps打不开psd文件的解决方法
- 菜鸟也疯狂,易语言自绘控件__进度条、滑块条
- mysql 前几个月的时间_MYsql 查询 查询当前周、月份及前几个月的数据(时间 查询)...
- 底层文件I/O和ANSI标准I/O的区别
- HDR视频色调映射算法(之二:Adaptive temporal TMO)
- ROSCon2018国际会议讲座录像和讲稿PPT
- Python案例分析之客户信贷预测模型