当我们设置状态时,引用地址是否会改变,即反应是否进行浅复制或深复制setState?
this.setState({count:1})
Run Code Online (Sandbox Code Playgroud)
怎样setState()运作?
每当你传递一个对象setState()(你也可以在这里传递函数)时,React 就会获取这个对象并将其合并到该state对象中。
两个对象的合并如何进行?
合并两个对象的工作方式如下:如果两个对象具有相同名称的属性,则第二个对象属性将覆盖第一个对象属性。让我们看一个例子,
let obj1 = { // Consider this as state
name: 'Ajay',
music: ['Shape of you','Closer']
}
let obj2 = { // Consider this as the object you pass to setState()
music: 'Cheap Thrills'
}
let obj3 = {...obj1, ...obj2} // Consider this as the new state
console.log(obj3)
Run Code Online (Sandbox Code Playgroud)
输出
{ name: 'Ajay', music: 'Cheap Thrills' }
Run Code Online (Sandbox Code Playgroud)
请注意,这只是浅层合并。因此,setState()不执行深层复制。它仅执行浅合并。