这两个fetch返回结果分别执行setState。
关于这部分我有一点没明白:
两次setState时间点不同,如何理解下面的“完全替换”?
这里的合并是浅合并,所以this.setState({comments})
完整保留了this.state.posts
, 但是完全替换了this.state.comments
。
这两个fetch返回结果分别执行setState。
关于这部分我有一点没明白:
这里的合并是浅合并,所以this.setState({comments})
完整保留了this.state.posts
, 但是完全替换了this.state.comments
。
所说的合并类似于
Object.assign( this.state, { comments: response.comments } );
也就是
Object.assign(
{ comments: [], ports: [] },
{ comments: response.comments }
);
其实一开始我也不是很理解,所以才搜到了你的问题,看到你这一篇还有回答,我有了启发,我感觉我理解错了,他最下面仅仅说的是this.setState({comments})
的浅合并,this.setState({posts
})的浅合并在上一行代码已经结束了,最终结果应该是`
this.state=
{
ports: response.posts,
comments: response.comments
}
1 回答1.8k 阅读✓ 已解决
4 回答1.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答1.5k 阅读
4 回答1.2k 阅读
1 回答1.6k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
红框里是用
this.setState({comments})
来举例,试图说明:你在替换this.state.comments
的时候,不会影响到this.state.posts
,反过来也是成立的,各个子项互不干扰,这样的更改很“浅” 。至于“合并”,大意就是:
this.state
始终是同一个state
实例,所有的更改不过是改变它的各个子项罢了,等于是把其他的内容“合并”到这个state
实例上来。