更新狀態

已完成

由於回應中的狀態是不可變的,若要修改具狀態物件的值,我們會將它取代為新的物件。 因此,我們會避免整個錯誤 (bug) 類別,因為正編輯中,所以物件可能處於無效狀態。

複製物件

基本類型 (例如布林值或數字) 是以值為基礎的物件,而不是參考物件。 因此任何變更都會自動取代整個物件。

字串具有類似的行為,因為是不可變的。 我們會以新的值取代來修改字串。

let message = 'Hello, ';
message = message + 'world!';

使用物件時,我們需要建立新執行個體,以確保物件的永久性。 建立物件複本最常見的語法就是 散佈語法,也稱為散佈運算子

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'
}