setState 是同步还是异步的?
结论:
setState本质是“入队 + 调度”,不是直接改值;是否“看起来同步”取决于 React 的批处理与刷新时机,React 18 默认自动批处理更广泛。
1. 关键表述
setState触发的是一次更新请求(enqueue update),state 会在下一次 render 计算- 同一轮事件/任务内的多次更新通常会被合并(batching)
2. 为什么你会看到“异步”
console.log(state)读到的是当前 render 的 state(闭包里的值)- 更新要等 React 调度到下一次 render 才生效
3. 如何强制同步
flushSync(() => setState(...))强制立即刷新(代价:可能更卡,慎用)