Я новичок в React и внедряю многофайловую систему загрузки. В настоящее время реализован пользовательский выбор файлов с помощью обработчика событий нажатия на кнопку, которая добавляет выбранный файл в массив.
По какой-то причине, когда я выбираю файл, в консоли отображается следующая ошибка, из-за которой приложение перестает работать:
Неуязвимое нарушение инварианта: объекты недопустимы какReact child (найдено: [Обещание объекта]). Если вы намеревались визуализировать коллекцию дочерних элементов, используйте вместо этого массив
. Для справки мой интерфейс для этой функции выглядит следующим образом:
ИВот соответствующие части моей реализации компонента:
state = {
selectedPortifolio: {},
portflioFiles: []
}
И этот метод вызывается для события onchange file
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);
});
};