react中的setState是同步还是异步

  1. setState 只在合成事件和钩子函数中是"异步"的,在原生事件和 setTimeout 中都是同步的。

    • 合成事件:就是react 在组件中的onClick等都是属于它自定义的合成事件

    • 原生事件:比如通过addeventListener添加的,dom中的原生事件

  2. setState的"异步"并不是说内部由异步代码实现,其实本身执行的过程和代码都是同步的,只是合成事件和钩子函数的调用顺序在更新之前,导致在合成事件和钩子函数中没法立马拿到更新后的值,形式了所谓的"异步",当然可以通过第二个参数 setState(partialState, callback) 中的callback拿到更新后的结果。

  3. setState 的批量更新优化也是建立在"异步"(合成事件、钩子函数)之上的,在原生事件和setTimeout 中不会批量更新,在"异步"中如果对同一个值进行多次 setState , setState 的批量更新策略会对其进行覆盖,取最后一次的执行,如果是同时 setState 多个不同的值,在更新时会对其进行合并批量更新

相关推荐
仰望星空的小猴子13 分钟前
React18和React19新特性
前端
小码哥_常14 分钟前
Android新航标:Navigation 3为何成为变革先锋?
前端
SuperEugene15 分钟前
Vue状态管理扫盲篇:状态管理中的常见坑 | 循环依赖、状态污染与调试技巧
前端·vue.js·面试
骑着小黑马16 分钟前
从 Electron 到 Tauri 2:我用 3.5MB 做了个音乐播放器
前端·vue.js·typescript
进击的尘埃16 分钟前
前端大文件上传全方案:切片、秒传、断点续传与 Worker 并行 Hash 计算实践
javascript
aykon16 分钟前
DataSource详解以及优势
前端
Mintopia16 分钟前
戴了 30 天智能手环后,我才发现自己一直低估了“睡眠”
前端
leolee1817 分钟前
react redux 简单使用
前端·react.js·redux
仰望星空的小猴子18 分钟前
常用的Hooks
前端
天才熊猫君18 分钟前
Vue Fragment 锚点机制
前端