为什么setState是异步的
如果是同步的话,碰到开发者高频率调用setState
方法,比如在一个回调函数中调用多个函数,每个函数都调用一次setState
,React
会频繁渲染,性能和体验都很差,所以采用了异步更新的方式,将数次变动集中起来更新。
避免这个异步更新问题的方法有两种,一是采用楼上说的回调函数,二是setState
传入一个函数,如下
this.setState(prevState=>({
...prevState,
[propYouWantToChange]:valueYouWantToChange
}))
这个prevState
每次都是新的,前提是在之前你没有通过setState({})
的方式改变过相关的属性
貌似一直是异步的。。。
update:异步与同步区别是,异步不需要等待当前作用域函数的执行,而是到当前作用域的同步任务都执行完毕之后,在执行异步的结果(而异步本身又有宏任务和微任务的区别,其实更推荐你去看异步的概念,而不限于react这里),好处自然是使你当前的同步js不会被阻塞,避免你react改变状态时,开销太大,又要去等待他执行完毕,带来不好的用户体验。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
是异步的呀,但是有回调函数的,你想得到改变后的可以