更新状态
由于状态在 React 中不可变,因此,若要修改有状态对象的值,请将其替换为新的对象。 这样可以避免由于对象正在被编辑而处于无效状态的整类 bug。
复制对象
基元类型(如布尔值或数字)是基于值的对象,而不是引用对象。 因此,任何更改都将自动替换整个对象。
字符串的行为类似,因为它们是不可变的。 要修改字符串,请将其替换为新值。
let message = 'Hello, ';
message = message + 'world!';
使用对象时,需要创建一个新的实例,以确保不可变性。 创建对象副本最常见的语法是展开语法 (spread syntax),也称为展开运算符。
let message = {
text: 'Hello, world',
color: 'red'
}
let messageCopy = { ...message };
修改各个属性
通常,我们只需更新对象的属性子集。 创建副本并修改每个属性是个单调乏味的过程。
注意在上述语法中,我们使用大括号 ({ }
) 创建了一个新的 JSON 对象。 扩展运算符可用于创建新对象的初始版本。 它使我们可以为某些属性指定更新的值。 例如,如果我们有一个新的 color
值,但想保留文本,则可以使用以下代码。
let message = {
text: 'Hello, world',
color: 'red'
}
let messageCopy = {
...message,
color: 'green'
};
这里,text
将保留原始值。 color
值更新为绿色。
// new object
{
text: 'Hello, world',
color: 'green'
}