React State Updates are Merged?怎么理解?

State Updates are Merged

When you call setState(), React merges the object you provide into the current state.

For example, your state may contain several independent variables:

constructor(props) {
    super(props);
    this.state = {
      posts: [],
      comments: []
    };
  }

Then you can update them independently with separate setState() calls:

componentDidMount() {
    fetchPosts().then(response => {
      this.setState({
        posts: response.posts
      });
    });

    fetchComments().then(response => {
      this.setState({
        comments: response.comments
      });
    });
  }

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

这个意思是多个state分开更新,会在合并之后然后执行render() 而不是更新一个state render()一次?
这么理解有问题么?

阅读 3k
2 个回答

React 更新好 state 数据之后,会先去刷新虚拟 DOM ,然后再是虚拟 DOM 与真实 DOM 的同步吧(此处不是根据虚拟 DOM 完整刷一遍真实 DOM)。

这个的意思是指,
setState方法在执行时,会作多个要更动state的合并,以及有类似异步的处理,
这是React中隐性的运行机制,目的主要是为了优化与性能。

分离的那个代码示例,是因为起了两个不同的异步,所以会让两个setState方法分开运行。

关于setState方法,可以参考我写的这篇文章: 为何说setState方法是异步的?

推荐问题
宣传栏