gpt4 book ai didi

javascript - 如何更新 React 组件的数组?

转载 作者:行者123 更新时间:2023-12-03 23:54:50 25 4
gpt4 key购买 nike

我发现 react 当数组中的元素发生更改时,不会更新组件。取而代之的是,必须克隆一个新数组并将其放置到位。

例如,我有一个数组 _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 的内置状态管理。如果你这样做,你的两种更新状态的方法之间的中间立场将起作用。当组件的状态或属性发生变化时,它会重新渲染。

编辑:此代码已过时,不是好的做法。请参阅下面更新的 jsfiddle

通过实现来初始化组件状态

getInitialState: function () {

var whereverItComesFrom = [
{id: 1, selected: false},
{id: 2, selected: false}
];

return {
suggestedPeople: whereverItComesFrom
}
}

您的渲染方法由此呈现:
render: function () {
var _this = this;
var peeps = this.state.suggestedPeople.map(function(person, index){
return <label key={index}><input type='checkbox' checked={person.selected} value={person.id} onChange={_this.handlePersonClick}/>{person.id}</label>;
});

return <div>{peeps}</div>;
},

handlePersonClick 可以是您的方法的合并:
handlePersonClick: function(e) {
var selectedId = e.target.value;
var checked = e.target.checked;
var peeps = this.state.suggestedPeople;
var index = _.findIndex(peeps, {id: selectedId});

peeps[index].selected = checked;

this.setState({suggestedPeople: peeps});

}

编辑:上述内容对我的早期 react 非常不了解。我已经更新了下面的 fiddle 链接,它应该作为解决这个问题的一个很好的基本例子。

jsfiddle

关于javascript - 如何更新 React 组件的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30178239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com