You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React状态更新重渲染时机:单状态即触发还是待全部更新?异步场景解析

React状态更新后组件的重渲染时机

先看你给出的代码示例:

const [a, set_a] = useState();
const [b, set_b] = useState();

const callback = async () => {
  const res = await api_call()

  set_a(res.data.a); // A
  set_b(res.data.b); // B
} 

这个场景下的重渲染次数和时机,取决于你使用的React版本:

  • React 18及以上版本:
    React 18默认开启了「自动批处理」功能,不管状态更新是在同步代码里,还是异步回调(比如await之后、Promise.then、setTimeout)里,都会自动把多个状态更新合并成一次,只触发一次重渲染。所以上面的代码里,set_a和set_b会被批量处理,组件会等整个callback函数执行完后,才进行一次重渲染。

  • React 18之前的版本:
    旧版本的React只有同步代码里的状态更新会被批量处理,异步回调里的状态更新不会。所以在await之后执行的set_a会立即触发一次重渲染,set_b执行后又会触发第二次重渲染,总共两次。

简单总结:React 18+会合并异步回调里的状态更新,只渲染一次;老版本会分别触发两次渲染。

内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:08:17