hooks 进阶
包含: useReducer、useMemo、useCallback、useLayoutEffect、自定义 Hooks(如 useFetch)
需求:封装一个 useDebounce 自定义 Hook(处理输入防抖),分析 useMemo 与 useCallback 的区别
副作用 useEffect
useEffect
基础语法- 依赖项
- 执行时机
- 常见场景
- 数据请求
- DOM 操作
- 订阅/取消订阅
- 依赖项优化
- 空依赖
- 完整依赖
useCallback
/useMemo
配合
要求
- 用 'useEffect' 实现页面的加载,数据渲染
- 实现 “监听窗口 resize 事件,实时更新页面宽度,携带取消监听“
缓存数组 useCallback
- 避免子组件不必要的渲染
要求
- 实现 “父组件传递函数给子组件”,用
useCallback
避免子组建的重复渲染
缓存计算结果 useMemo
- 优化复杂的计算
要求
- 实现 “复杂列表过滤计算”,用
useMemo
缓存过滤结果
获取 DOM 元素 useRef
- 保存跨周期的变量
跨组件通信 useContext
跨组件通信: 创建、PRovider、Consumer
要求
创建一个跨组件通信的主题切换
复杂的状态管理 useReducer
代替 useState 处理多状态关联逻辑
问题
- useContext 和 useReducer 结合使用的场景是什么?和 Redux 有什么关系?