热门

最新

红包

立Flag

投票

同城

我的

发布
cc18868876837
码飞_CC
5 年前
truecc18868876837

写过React的都知道,我们在SetTimeout中调用setState时是同步更新state的,这是为什么呢?

并不是setTimeout改变了setState,而是setTimeout帮助setState“逃脱”了React对它的管控(setTimeout的回调异步执行,使得本该在React全局变量isBatchingUpdates为true时执行的,变成了在false执行了,使得当前场景下的setState具备了立刻发起同步更新的能力,类似如下代码),只要是在React管控下的setState,那就一定是异步的。


reduce = () => {
// 进来先锁上
isBatchingUpdates = true
setTimeout(() => {
console.log('reduce setState前的count', this.state.count)
this.setState({
count: this.state.count - 1
});
console.log('reduce setState后的count', this.state.count)
},0);
// 执行完函数再放开
isBatchingUpdates = false
}

CSDN App 扫码分享
分享
评论
1
打赏
  • 复制链接
  • 举报
下一条动态
立即登录