陌上人如玉
公子世无双

12-高频面试题 第2页

React 高频面试题精讲:Hooks 规则、setState 同步异步、useEffect 区别、key 与 Diff、Context 重渲染、React 与 Vue 对比、Fiber 及 React 18/19 变化。
12.8 Context 为什么全量重渲染-陌上寒

12.8 Context 为什么全量重渲染

因为 Context 的订阅粒度是整个 value(而不是「value 里的某个字段」),且它的更新直接通知消费者、不经过 props 比较——所以 React.memo 也拦不住。

赞(0)陌上寒陌上寒阅读()去评论
12.7 useMemo/useCallback 真有用吗-陌上寒

12.7 useMemo/useCallback 真有用吗

有用,但只在三个场景——「配合 React.memo 稳定 props 引用」「计算确实昂贵」「作为其它 Hook 的依赖」;其余情况是负担(比较依赖 + 保存缓存 + 维护成本),所以标准答案是「先测量,再优化」。

赞(0)陌上寒陌上寒阅读()去评论
12.6 受控与非受控怎么选-陌上寒

12.6 受控与非受控怎么选

看「是否需要实时响应输入」——需要(实时校验、格式化、联动)就用受控;只需要「提交时的最终值」、字段很多、或集成非 React 控件就用非受控。

赞(0)陌上寒陌上寒阅读()去评论
12.5 diff 为什么是 O(n)-陌上寒

12.5 diff 为什么是 O(n)

React 用三个假设——「只做同层比较」「type 不同直接重建」「用 key 标识同层元素」——把「树的最小编辑距离」的理论复杂度 O(n³) 降到了 O(n),代价是放弃「跨层复用」。

赞(0)陌上寒陌上寒阅读()去评论
12.4 为什么需要 key-陌上寒

12.4 为什么需要 key

key 是 React 用来判断「新旧列表中的元素是否是同一个」的身份标识——它决定组件是「复用」(保留 DOM 与状态)还是「重建」(状态丢失);用 index 会在列表增删排序时造成状态错位。

赞(0)陌上寒陌上寒阅读()去评论
12.3 useEffect 与 useLayoutEffect-陌上寒

12.3 useEffect 与 useLayoutEffect

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

赞(0)陌上寒陌上寒阅读()去评论
12.2 setState 是同步还是异步-陌上寒

12.2 setState 是同步还是异步

setState 的「调用」是同步的,「应用更新并重新渲染」是批处理延后的——所以事件处理里读不到新值;React 18 起所有场景都自动批处理(不再有「异步回调里同步渲染」的例外)。

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