4 个回答

是异步的呀,但是有回调函数的,你想得到改变后的可以

this.setState({xxxxx},function(){
//查看改变后的值
})

如果是同步的话,碰到开发者高频率调用setState方法,比如在一个回调函数中调用多个函数,每个函数都调用一次setStateReact会频繁渲染,性能和体验都很差,所以采用了异步更新的方式,将数次变动集中起来更新。

避免这个异步更新问题的方法有两种,一是采用楼上说的回调函数,二是setState传入一个函数,如下

this.setState(prevState=>({
    ...prevState,
    [propYouWantToChange]:valueYouWantToChange
}))

这个prevState每次都是新的,前提是在之前你没有通过setState({})的方式改变过相关的属性

貌似一直是异步的。。。

update:异步与同步区别是,异步不需要等待当前作用域函数的执行,而是到当前作用域的同步任务都执行完毕之后,在执行异步的结果(而异步本身又有宏任务和微任务的区别,其实更推荐你去看异步的概念,而不限于react这里),好处自然是使你当前的同步js不会被阻塞,避免你react改变状态时,开销太大,又要去等待他执行完毕,带来不好的用户体验。

都是异步的,没有同步的时候

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题