更新狀態
由於回應中的狀態是不可變的,若要修改具狀態物件的值,我們會將它取代為新的物件。 因此,我們會避免整個錯誤 (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'
}