使用SetState在react中更新数组对象中的一项

时间:2019-05-14 18:20:32

标签: javascript reactjs

我有一个名为item的状态对象。

items: [
    {
      name: 'John'
      id: '1',
      checked: false,
    },
    {
      name: 'Dude'
      id: '2',
      checked: true,
    }
]

在UI上,单击“我需要将ID = 1的项目的选中属性更新为true” 如何将setState用于项目以更新项目中的一个(单个)项目

3 个答案:

答案 0 :(得分:2)

像这样?注释中的解释:

onClick(id) {
  // Create a temporary copy of your items array
  const itemsCopy = this.state.items.slice();

  // Find the index of the items where the item has the id you want
  const idx= itemsCopy.findIndex(x => x.id === id);

  // Re-assign the item to have the same values as before (name and id), but change the checked to true
  itemsCopy[idx] = {...itemsCopy[idx], checked: true};

  // Update the state with our modified copy
  this.setState({items: itemsCopy});
}

答案 1 :(得分:1)

const {items} = this.state;
const index = items.findIndex(val=>val.id ===1);
items[index].checked = true;
this.setState({items});

答案 2 :(得分:1)

处于状态的“ items”对象应更新。因此slice可用于复制数组。 并且将其设置回状态应该足够了,以便组件可以了解状态已更改。

let items = this.state.items.slice();

const index = items.findIndex(val => val.id === 1);
items[index].checked = true;
this.setState({ items });