Hook 允许我们
按照代码的用途分离
他們
一般来说在函数退出后变量就会”消失”,而 state 中的变量会被 React 保留
|
1. 可以让你在函数组件中执行副作用操作 2. 会在每次渲染后都执行 |
2. 该回调函数仅在某个依赖项改变时才会更新 3. 返回缓存的值(函数) |
2. 该回调函数仅在某个依赖项改变时才会更新 3. 返回缓存的值(变量) |
1. 当 ref 对象内容发生变化時useRef 并不会通知你。 2. 变更 .current 属性不会引发组件重新渲染 3.很方便地保存 任何可变值
|
数据获取,设置订阅以及手动更改 React 组件中的 DOM 都属于副作用
保存你传递的函数(我们将它称之为 “effect”),并且在执行 DOM 更新之后调用它
- 为什么要在 effect 中返回一个函数 ?
这是 effect 可选的清除机制每个 effect 都可以返回一个清除函数
React 会在组件卸载的时候执行清除操作
reducer处理的state对象必须是,这意味着永远不要直接修改参数中的state对象reducer函数应该每次都返回┅个新的state object
备注: Object.is 不会做类型隐式转换 (即 先判断类型 在判断值)我们上文提到过reducer需要保持幂等性,更加可预测、可测试如果每次返回同一个state,就无法保证无论执行多少次都是相同的结果
- useMemo和useCallback都会在组件第一次渲染的时候执行之后会在其依赖的变量发生改变时再次执行;
- 并苴这两个hooks都返回缓存的值,useMemo返回缓存的变量useCallback返回缓存的函数。
-
传入 useMemo 的函数会在渲染期间执行请不要在这个函数内部执行与渲染无关的操作,诸如副作用这类的操作属于 useEffect 的适用范畴而不是 useMemo
useRef 会在每次渲染时返回同一个 ref 对象