0
我有一個組件,其中有一個prop,它是一個數組,用於映射併爲該數組中的每個項目返回一個子組件。這些項目中的每一個都是另一個對象數組。然而,當我的內部數組中執行更新的項目是這樣的:在執行道具的深度更新時反應不更新組件
let newInnerArray = getInnerArray(itemIndex); //assume this is a function that gets the correct inner array by the index
newInnerArray[innerArrayIndex].name = "changed name";
arrayObjs[itemIndex].innerArray = newInnerArray;
的反應,因爲我已經進行了更新,以內部陣列並沒有改變他們的數目組件不更新(這會觸發更新)。 這裏是一個什麼樣的道具看起來像澄清的簡化版本:
[{
name: "name 1",
innerArray: [
{
innerName: "inner name 1"
}
]
}]
在我的組件
所以,我正在映射在道具外陣中還有。當我更新道具項目的「innerName」之一時,不會爲該組件激發更新。
觸發更新,我加入一個虛擬屬性,每個外陣列的項目和每一個我做一個更新到內部陣列像這次更新它:
arrayObjs[itemIndex].date = performance.now(); //using performance.now() because it always produces a unique value
現在製作道具看起來像這樣:
[{
name: "name 1",
date: performance.now(),
innerArray: [
{
"innerName": "inner name 1"
}
]
}]
這工作,但很hacky。每次更新其中一個道具的內部數組時,是否有更好的方法來強制更新組件? PS:對不起,如果我沒有解釋得很好,或者它很混亂。如果有人不明白,我會進一步解釋。
有兩件事:innerArray已被克隆,我嘗試使用第三種方法,但它仍然無法工作。我寧願用shouldComponentUpdate解決這個問題,因爲這不是因爲它是最不引人注目的解決方案 – Ryan