1:函数组件 类组件 区别
1:类组件缺点:
this指向复杂
生命周期复杂+性能差+版本问题 相同得逻辑分散到不同得生命周期里面 +维护困难
复用能力差:高阶组件 增加组件层级 臃肿;
2:函数组件缺点:
ui组件 纯函数 没有状态 没有生命周期 没有this指向问题 涉及状态:和redux配合
3:版本出现16.8:hooks作用: function 增强=>class具备类组件得功能 增强得本质=特殊函数=钩子函数(hooks)
增强方向:存储状态,副作用操作 性能优化
4:常见 得hooks
useState状态
userEffest 副作用
useMemo 缓存:性能优化
useRef DOM 引用
useCallback 性能优化
useImperativeHandle 暴露指定子组件方法
useLayoutEffect处理浏览器渲染之前执行
useDebugValue 处理调试
自定义hooks
01-声明 在函数组件中 直接用useState声明
02-参数 useState唯一参数 =>初始化state值
03-返回值:是一个数组,【状态state,改变state方法】
扩展:{可以用里面得值得count}
状态state数据类型可以是普通数据类型 也可以是复杂数据类型
04-读取状态 直接通过表达式{state}
05-更新状态:直接调用setstate,
4:闭包对函数进行持有,所以数据可以累加
数组解构: 名称可以自定义,所以可以有不同得名字去设置,可以设置多个状态值
惰性初始化 让性能提升。
setstate同步还是异步---有可能是异步的
分条件 生命周期里面,合成事件是异步的,在setTimout里面是同步的
累加陷阱
先执行同步的后执行异步的 --异步一直等待上面的值 优先执行同步代码
用回调函数里面传递一个参可以解决累加问题,参数是上一个state
异步先执行log setstate可以批量更新,修改数据,节约性能
在定时器里面的方法都是同步的(执行完毕得到值才进行下一步),在合成事件里面方法都是异步的。
修改方法用和原先比较 进行覆盖
怎么解决累加问题 hooks应用场景
类组件 state值一样 不应该触发render 所以要进行性能优化
优化方案:
01-方案一:shouldcomponentUpdate生命周期 (它来判断render该不该更新)
{下一个改变的参数触发更新的数据条件(nextprops,nextState}当nextProps和要修改的数据进行做对比,如果不同就更新
方案二: