我发现反应不更新数组中的元素时更改组件。相反,一个新的数组必须被克隆并放置。例如,我有一个_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 –