Javascript 如何在不删除React中以前的值的情况下将新对象推入状态
我需要在不删除以前的值的情况下将新对象推入状态变量。我的州是Javascript 如何在不删除React中以前的值的情况下将新对象推入状态,javascript,reactjs,Javascript,Reactjs,我需要在不删除以前的值的情况下将新对象推入状态变量。我的州是 this.state = { files:{ file1: { user1:[{ key1: val1, key2: val2, key3: val3 }, { key1: val1, key2:
this.state = {
files:{
file1:
{
user1:[{
key1: val1,
key2: val2,
key3: val3
},
{
key1: val1,
key2: val2,
key3: val3
}
]
}
}
}
我需要将文件更新为
files:{
file1:
{
user1:[{
key1: val1,
key2: val2,
key3: val3
},
{
key1: val1,
key2: val2,
key3: val3
}
]
},
file2:
{
user2:[{
key1: val1,
key2: val2,
key3: val3
},
{
key1: val1,
key2: val2,
key3: val3
}
]
}
}
我需要将新对象file2
推入与file1
具有相同结构的值的状态。如何使用这两个对象更新状态?您可以通过使用扩展运算符来实现这一点。
可按如下方式添加:
this.setState({
file1: [...this.state.file1,{key1:'val1',key2:'val2',key3:'val3'}]
})
您应该使用setState
函数表达式,以便访问以前的状态:
addFile(newFile) {
this.setState(state => ({
files: {...state.files, ...newFile}
})
}
newFile
应该是如下所示的对象:
{
file2: {
...
}
}
此对象将合并到上一个状态。如果已经有一个条目具有相同的键(file2
),它将被覆盖。实现这一点的推荐方法是使用数组分解。这将以数组的形式给出结果<代码>文件1
第0个键内和file2
第1个键内。我需要钥匙应该是file1
和file2
,而不是0
或1
。更新了我的答案。这在@Hinrich工作。对象根据字母顺序或键进行排序。例如:File1
,File2
等。如何根据推送顺序排列它们?对象本质上是未排序的,可以将其视为集合。如果顺序对您很重要,您应该将数据存储在数组中。