看React官方文档的点小疑惑

State and Lifecycle 这一节里面有两个地方不太懂

1. State Updates are Merged

The merging is shallow, so this.setState({comments}) leaves this.state.posts intact, but completely replaces this.state.comments.

我的理解是,在多个异步请求都在调用this.setState()的时候,react会等到最后一个请求返回后,this.setState()才会更新视图,在此之前的this.setState()做的都是合并this.state这个对象的操作。这个理解有问题么?如果没问题的话,上面这段引用应该如何翻译?

阅读 1.9k
3 个回答

更新视图是在一次周期中,而非多个异步请求都返回后,this.setState({comments}) 会把你state中的comments给替换成这个新的comments,也即浅复制

一个例子说明问题:
this.state = {a: 1, b: 2};
当你执行this.setState({a: 3})的时候,不会影响其b的值。
最终结果为{a: 3, b: 2}

意思是说,将你setState的这个属性完全替换掉而不影响其他属性的值。类似Object.assgin()函数。

你可以吧setState变化比喻成操作对象,每次改变 { a: 2, b: 4 } 这个里面值的时候,你用obj.a 或者 obj.b 都不会因为改变了obj.a = 3 从而导致 obj.b = 3.

so 可以说每次setState 时候都是进行合并,preState(之前state) 和 currentState(当前state) 合并。而且preState和 currentState 里面只有一个值或者多个值不同。

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