【发布时间】:2020-02-07 06:02:18
【问题描述】:
我是 React 新手,我正在实现一个多文件上传系统。我目前已经通过按钮上的单击事件处理程序实现了用户驱动的文件选择,该按钮将所选文件添加到数组中。
由于某种原因,当我选择一个文件时,控制台中会显示以下错误,导致应用程序停止工作:
Uncaught Invariant Violation:对象作为 React 子对象无效 (发现:[对象承诺])。如果你打算渲染一个集合 孩子们,用数组代替
以下是我的组件实现的相关部分:
state = {
selectedPortifolio: {},
portflioFiles: []
}
并且这个方法是在文件onchange事件上调用的
loadPortfolio = (e) => {
if (e.target.files) {
this.setState({
selectedPortifolio: {
file: e.target.files[0],
filename: e.target.files[0].name
}
});
}
};
当点击添加按钮时,会调用这个方法。
addPortfolio = () => {
if (
this.state.selectedPortifolio &&
this.state.selectedPortifolio.file
) {
let items = this.state.portflioFiles;
items.push(this.state.selectedPortifolio);
this.setState({ selectedPortifolio: {}, portflioFiles: items });
console.log(this.state.portflioFiles);
}
};
在这一切之后,我将此数组加载到 div 中
{this.state.portflioFiles.length > 0 ? (
this.state.portflioFiles.map((item, index) => {
return (
<div className="portfolio-file" key={index}>
{getDataURL(item.file).then((data) => {
return (
<image
src={data}
alt={item.filename}
/>
);
})}
</div>
);
})
) : (
<div></fdv>
)}
而getDataURL方法是在另一个文件中定义的。
export const getDataURL = (file) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = (error) => reject(error);
});
};
【问题讨论】:
标签: reactjs file file-upload