У меня есть функция ниже, которая добавляет вложения из <input type = "file" multiple />
в родительское состояние.
Это работает нормально, пока пользователь не захочет добавить другое вложение/я, новые вложения переопределяют существующие, как я могу добавить новые вложения в существующий массив вложений?
handleAddAttachments = fileList => {
this.props.handleChangeEvent('attachments', Array.from(fileList));
};
Я пробовал это, но, похоже, это не работает.
handleAddAttachments = fileList => {
const { attachments } = this.props.ticket;
this.props.handleChangeEvent('attachments', [...attachments, fileList]);
};
Родительская функция handleChangeEvent
:
makeHandleChange = (pageName, change) => {
this.setState({
ticket: { ...this.state.ticket, [pageName]: change },
});
};
@sigmus, нет, скажем, я сначала добавил 3 вложения, а затем добавил 4-е, я вижу [{"0": {},"1": {},"2": {}}{"0": {}}]
вместо [{},{},{},{}]
, что я ожидал увидеть.
Во второй версии вам не хватает части Array.from()
. Изменение из fileInput не является непосредственно массивом, поэтому оператор распространения не работает.
Это должно помочь:
handleAddAttachments = fileList => {
const { attachments } = this.props.ticket;
this.props.handleChangeEvent('attachments', [...attachments, ...Array.from(fileList)]);
};
Дополнительную информацию о том, почему это не массив, вы можете найти здесь: Почему объект FileList не является массивом?
Спасибо @sigmus, я добавил недостающий разворот в Array.from()
Я тоже пробовал, сначала результат [[{},{},{},{}]]
вместо [{},{},{},{}]
, затем, когда я добавляю новое вложение, результат: [[{},{},{},{}],[{}]]
вместо [{},{},{},{},{}]
А если еще и Array.from выложить лайком [...attachments, ...Array.from(fileList)]
?
@NicolasGehlert, пожалуйста, обновите свой вопрос, чтобы я мог его принять
Если вы
console.info([...attachments, fileList])
видите ожидаемый результат?