React · 单选题 · 第 41 题
前端与全栈开发面试 · 第 41 题
关于 React 18 的状态更新批处理,下列说法正确的是?
- A只有 React 合成事件处理函数里的多次更新才会批处理,其他地方都不会
- B每次调用 setState 都会立即同步触发一次重新渲染,不存在任何批处理
- CReact 18 已经彻底移除了批处理,改为由并发调度器逐个处理每次更新
- DsetTimeout、Promise 回调、原生事件里的多次状态更新,也会被自动批处理
答案
D D. setTimeout、Promise 回调、原生事件里的多次状态更新,也会被自动批处理
解析
React 17 只在合成事件里批处理,在 setTimeout 里连续两次 setState 会渲染两次。React 18 使用 createRoot 后默认自动批处理,无论更新发生在哪里,同一时机的多次更新只渲染一次。确实需要立即同步更新 DOM 时,可以用 flushSync。