Javascript 如何在react中为数组中的特定对象设置状态

Javascript 如何在react中为数组中的特定对象设置状态,javascript,arrays,reactjs,dictionary,state,Javascript,Arrays,Reactjs,Dictionary,State,我在React应用程序中有我所在州的地图列表。例: item : [ { name: 'abc', age: '10' }, { name: 'xyz', age: '2' }, { name: 'sdf', age: '6'} ] 如果我只想更改集合“age”:10作为名称“xjz”,我将如何更新状态 您可以使用地图。例如: const newData = data.map(val => { if(val.id === id) { return {...val, name:

我在React应用程序中有我所在州的地图列表。例:

item : [ { name: 'abc', age: '10' }, { name: 'xyz', age: '2' }, { name: 'sdf', age: '6'} ]

如果我只想更改集合“age”:10作为名称“xjz”,我将如何更新状态

您可以使用地图。例如:

const newData = data.map(val => {
  if(val.id === id) {
    return {...val, name: 'new name'};
  }
  return val;
}

您必须更新状态中的关联变量:

this.state.values[1].age = 10;

this.setState({
    values,
});

您应该创建一个新的数组映射,映射到具有新值的旧数组:

const initial=[
{姓名:'abc',年龄:'10'},
{姓名:'xyz',年龄:'2'},
{姓名:'sdf',年龄:'6'}
]
const updated=initial.map(元素=>
element.name=='xyz'
?{…元素,年龄:10}
:元素
)
console.log(已更新)
/*
[
{
“名称”:“abc”,
“年龄”:“10”
},
{
“名称”:“xyz”,
“年龄”:10岁
},
{
“名称”:“自卫队”,
“年龄”:“6”
}
]

*/
最简单的解决方案是
映射您的阵列,并仅替换与您的条件匹配的项目:

this.setState(prev => ({
    item: prev.item.map(item => item.name === 'xjz' ? { ...item, age: '10' } : item)
}))
在类函数中:

changeValue = name => {
    this.setState(prev => ({
        item: prev.item.map(item => item.name === name ? { ...item, age: '10' } : item)
    }))
}

changeValue('xyz')

你尝试过的东西可能重复?一种方法是使用需要匹配的条件,然后更新该
索引处的对象。另外,您的示例中没有name
xjz
。非常感谢。你的解决方案很完美!!!很高兴它有帮助,请随意接受它作为正确答案:)