什麼是不變性?它在React世界中扮演怎樣的角色?
在React編程中,你可能會遇到的一個概念就是不變性(和其反面,可變性)。
不管你對不變性的概念有什麼看法,React及其大部分生態系統基本上都強制了這一點,所以你至少需要了解為什麼它如此重要以及它的影響。
在編程中,當變量的值在創建後無法更改時,該變量就是不可變的。
當你操作字符串時,你可能已經在不知不覺中使用了不可變變量。字符串在默認情況下是不可變的,當你改變它們時,實際上是創建了一個新的字符串並將其賦值給同一個變量名。
不可變變量永遠無法更改。要更新其值,你需要創建一個新的變量。
對於對象和數組也是同樣的道理。
要添加新項目,你可以創建一個新的數組,通過連接舊數組和新項目。
在更改對象之前,需要先將其複製。
這個原則在React中有很多應用。
例如,你不應該直接變異組件的state
屬性,而是應該通過setState()
方法來變更。
在Redux中,你不應該直接變異狀態,而是通過reducer函數來變更。
那麼,為什麼要這樣做呢?
其原因有很多,其中最重要的是:
- 變異可以集中管理,例如在Redux中,這樣可以提高調試能力並減少錯誤源。
- 代碼看起來更整潔,更容易理解。你不會預期一個函數在沒有你知曉的情況下改變某個值,這給你帶來了可預測性。當函數不變異對象而只返回一個新對象時,稱為純函數。
- 函數庫可以對代碼進行優化,例如,JavaScript在將一個舊的對象引用替換為一個全新的對象時,比直接修改現有對象更快。這提升了性能。