我們都知道React文檔說直接不會改變this.state
。我想我有一個關於狀態陣列和不變性的問題:在React中處理狀態和對象數組
如果我有一個狀態保持的對象數組,我應該總是使用immutability helper作爲this question當以任何方式突變該數組?
或者使用[].concat()
或[].slice()
作爲回答here和here是完全可以接受的嗎?
我再次問這個問題,因爲[].concat()
和[].slice()
確實返回新數組,但只返回淺拷貝數組。如果我改變了數組的元素,它會改變時的陣列,以及違反國家Reactjs的(我已經看太多FMA:兄弟):第一條規則
var arr1 = [{ name : "bill" }, { name : "chet" }];
var arr2 = arr1.slice();
// this changes both arrays
arr2[0].name = "kevin";
// check
(arr1[0].name === arr2[0].name) // => true; both are "kevin"
(arr1[0] === arr2[0]) // => true; only shallow copy
// this changes arr2 only
arr2.push({ name : "alex" });
// check again
(arr1.length === arr2.length) // => false;
(arr1[0].name === arr2[0].name) // => still true;
(arr1[0] === arr2[0]) // => still true;
據我所知, addon update
在覆蓋shouldComponentUpdate
時最爲常用,但對於我在做的事情,我不需要重寫該函數;我只需要通過向數組添加新元素(使用concat或slice解決)或通過更改現有元素的屬性(通過使用React.addons.update解決)來更改處於狀態的數組中的對象。
TL; DR
如果不重寫shouldComponentUpdate
,何時應使用React.addons.update
超過[].slice()
或[].concat()
突變存儲在狀態對象的數組?
這清理了很多。數組_is_作爲道具傳遞給子節點,並且只在包含的組件中進行操作,所以我認爲這並不重要。謝謝! – theoperatore