无法添加到从状态复制的对象数组

时间:2020-02-20 15:46:42

标签: javascript reactjs react-native

我有一个在UI中填充的文件名列表。将文件上传到API后,我想在前端( that.state.selectedReq.​​userUploads )上添加到此列表。我使用 let userFiles = Object.assign 创建状态的副本,然后想要遍历要上传的文件列表,并将其添加到状态数组的副本中。然后,我想用新数组设置状态。但是,我在 userFiles.push(upload); 行上出错了,我不确定为什么。

var i = 100;
let userFiles = Object.assign({}, that.state.selectedReq.userUploads);
that.state.selectedFiles.forEach((x) => {
  let upload = {
    documentName: x.name,
    userUploadId: i,
    notes: "undefined"
   };
    i--;
    userFiles.push(upload);
  })

  that.setState({
    uploadFileInProgress: false,
    userUploads: userFiles
  })

是否有更好的方法来完成我要完成的工作?

2 个答案:

答案 0 :(得分:3)

Object.assign()返回一个对象,使用扩展运算符将数组复制为状态。

let userFiles = [...that.state.selectedReq.userUploads];

答案 1 :(得分:0)

.push()是数组的方法,而不是对象。 Object.assign()将生成一个对象,这就是代码出错的原因。

如果您的state.selectedReq.userUploads是一个数组,则可以执行以下操作:

let userFiles = that.state.selectedReq.userUploads.slice();
...
userFiles.push(upload);

如果您的state.selectedReq.userUploads是一个对象,则可以执行以下操作:

let userFiles = Object.assign({}, that.state.selectedReq.userUploads);
...
userFiles[x.name] = upload;