我發現反應不更新數組中的元素時更改組件。相反,一個新的數組必須被克隆並放置。例如,我有一個_suggestedPeople
的數組。當點擊代表這些人中的一個的UI元素時,我想通過致電selectPerson
進行註冊。如何更新React組件的數組?
我希望作出反應這樣做後更新:
selectPerson: function(personID, selected) {
var person = _.find(_suggestedPeople, {id: personID});
if (person) {
person.selected = selected;
}
return person;
},
不過,我最後都這樣做,這似乎是不必要的:
selectPerson: function(personID, selected) {
var index = _.findIndex(_suggestedPeople, {id: personID});
var found = index !== -1;
if (found) {
var people = _.cloneDeep(_suggestedPeople);
people[index].selected = selected;
_suggestedPeople = people;
}
return found;
},
這是後者更新的正確方法React組件的數組數據?或者我錯過了什麼?
也許不同的方法更適合不變性範式。例如。將對所選人員對象的引用存儲在組件的另一個屬性中,而不是改變人員對象。 –
爲什麼不只是在發生新選擇時觸發更新? React不會跟蹤對象的屬性,所以僅僅設置對象的選擇將不起作用。例如,您可以調用['forceUpdate'](http://facebook.github.io/react/docs/component-api.html#forceupdate)。 – WiredPrairie
對不起,我發現它有點難以遵循你的代碼片斷,但我認爲你應該將選定的人存儲在組件狀態(或者它的父對象的狀態取決於實現哪個組件),並強制通過調用'this.setState({_ suggestedPeople:people,selectedPerson:person})'重新渲染。有一個小提琴http://jsfiddle.net/map5vf94/11/在這個問題的答案,這可能是你想要做的 - http://stackoverflow.com/questions/30042657/reactjs-calculate-state- on-change-to-components-props-as-a-result-of-parent-re-r –