陌上人如玉
公子世无双

02-Hooks体系 第2页

React Hooks 体系:useState、useEffect、useRef、useContext、useMemo、useReducer 等内置 Hook 的原理与最佳实践,自定义 Hook、闭包陷阱与 React 19 新 Hooks。
2.9 useImperativeHandle-陌上寒

2.9 useImperativeHandle

useImperativeHandle 让子组件只暴露想暴露的命令式方法(而不是把整个 DOM 或实例交出去),配合 forwardRef 使用;它是「父组件需要调用子组件方法」这种场景的标准解法,但应该尽量少用。

赞(0)陌上寒陌上寒阅读()去评论
2.8 useReducer-陌上寒

2.8 useReducer

useReducer 把「状态」与「如何更新状态」的规则拆开——状态在 Hook 里,更新规则写在纯函数 reducer 里;它适合「状态之间有关联、转移逻辑复杂、需要集中管理与测试」的场景。

赞(0)陌上寒陌上寒阅读()去评论
2.7 useMemo 与 useCallback-陌上寒

2.7 useMemo 与 useCallback

两者都是「引用稳定工具」——useMemo 缓存计算结果,useCallback 缓存函数引用;它们的价值只在「配合 React.memo」或「计算确实昂贵」时才成立,滥用反而增加成本。

赞(0)陌上寒陌上寒阅读()去评论
2.6 useContext-陌上寒

2.6 useContext

useContext 让组件跨越任意层级读取共享值,避免「层层透传 props」;但它的代价是「Provider 的 value 一变,所有消费者都会重渲染」——所以它适合「不常变化的共享值」,不适合高频变化的状态。

赞(0)陌上寒陌上寒阅读()去评论
2.5 useRef-陌上寒

2.5 useRef

useRef 返回一个「在整个组件生命周期内保持同一引用」的对象,修改它的 .current 不会触发重渲染——因此它适合存「DOM 引用」与「与 UI 无关的可变值」。

赞(0)陌上寒陌上寒阅读()去评论
2.4 useLayoutEffect-陌上寒

2.4 useLayoutEffect

useLayoutEffect 与 useEffect 的唯一区别是执行时机——前者在「DOM 更新后、浏览器绘制前」同步执行,后者在「绘制后」异步执行;需要「测量 DOM 并立即修正」以防闪烁时用前者。

赞(0)陌上寒陌上寒阅读()去评论
2.3 useEffect 深入-陌上寒

2.3 useEffect 深入

useEffect 的语义是「把这个组件与某个外部系统同步起来」——它在渲染提交、浏览器绘制之后异步执行,通过依赖数组控制何时重新同步,通过清理函数保证「切换前先撤销上一次的同步」。

赞(0)陌上寒陌上寒阅读()去评论
2.2 useState 深入-陌上寒

2.2 useState 深入

useState 的关键细节有三个——初始值传函数才是惰性求值、新值依赖旧值必须用函数式更新、设置相同值会「bailout」但仍可能渲染一次。

赞(0)陌上寒陌上寒阅读()去评论
2.1 Hooks 规则与实现原理-陌上寒

2.1 Hooks 规则与实现原理

React 用链表按「调用顺序」存储每个组件的 Hooks 状态,因此 Hooks 必须在每次渲染中以完全相同的顺序、相同次数被调用——这就是「不能在条件/循环里写 Hook」的根本原因。

赞(0)陌上寒陌上寒阅读()去评论