react中的setState是同步还是异步

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

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

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

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

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

相关推荐
一个很帅的帅哥1 天前
nums.sort()和nums.sort((a, b) => a - b)
javascript
青莲8431 天前
Java并发编程高级(线程池·Executor框架·并发集合)
android·前端·面试
程序员Agions1 天前
Flutter 邪修秘籍:那些官方文档不会告诉你的骚操作
前端·flutter
白驹过隙不负青春1 天前
Docker-compose部署java服务及前端服务
java·运维·前端·docker·容器·centos
满天星辰1 天前
Vue.js的优点
前端·vue.js
哒哒哒5285201 天前
React createContext 跨组件共享数据实战指南
前端
怪可爱的地球人1 天前
UnoCss最新配置攻略
前端
Carry3451 天前
Nexus respository 搭建前端 npm 私服
前端·docker
满天星辰1 天前
使用 onCleanup处理异步副作用
前端·vue.js
POLITE31 天前
Leetcode 142.环形链表 II JavaScript (Day 10)
javascript·leetcode·链表