更新状态

已完成

由于状态在 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'
}