React 中 setState 什么时候是同步的,什么时候是异步的?(这里所说的同步异步, 并不是真正的同步异步, 它还是同步执行的。这里的异步指的是多个state会合成到一起进行批量更新。)

本文解释了在React中,由React触发的事件处理(如onClick)调用setState不会同步更新state,而其他情况下会同步。这源于batchedUpdates的存在,它在处理某些事件时将isBatchingUpdates设为true,导致setState不立即同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在React中,如果是由React引发的事件处理(比如通过onClick引发的事件处理),调用setState不会同步更新this.state,除此之外的setState调用会同步执行this.state。“除此之外”,指的是绕过React通过addEventListener等直接添加的事件处理函数,还有通过setTimeout / setInterval产生的异步调用。之所以产生这样的效果,是因为在React的setState函数实现中,会根据一个变量isBatchingUpdates判断是直接更新this.state还是放到队列中回头再说,而isBatchingUpdates默认是false,也就表示setState会同步更新this.state,但是,有一个函数batchedUpdates,这个函数会把isBatchingUpdates修改为true,而当React在调用事件处理函数之前就会调用batchedUpdates,造成的后果,就是由React控制的事件处理过程setState不会同步更新this.state。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值