我有一个在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
})
是否有更好的方法来完成我要完成的工作?
答案 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;