Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不删除React中以前的值的情况下将新对象推入状态_Javascript_Reactjs - Fatal编程技术网

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
等。如何根据推送顺序排列它们?对象本质上是未排序的,可以将其视为集合。如果顺序对您很重要,您应该将数据存储在
数组中。