【问题标题】:Unable to add to an array of objects copied from state [duplicate]无法添加到从状态复制的对象数组中[重复]
【发布时间】:2020-06-05 00:02:19
【问题描述】:

我有一个填充在 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
  })

有没有更好的方法来完成我想要完成的事情?

【问题讨论】:

  • 你能显示你所说的错误吗?
  • 你得到的错误信息是什么?
  • userFiles 不是列表。

标签: javascript reactjs react-native


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    .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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2022-01-05
      • 2020-08-26
      • 2014-03-17
      • 2016-09-02
      • 2013-03-22
      相关资源
      最近更新 更多