#javascript #reactjs #lodash
#javascript #reactjs #Lodash
Вопрос:
В приведенном ниже методе объект o
добавляется к списку объектов qs
. Прокомментированная часть не работает, теперь раскомментированная часть работает. Что не так с прокомментированной частью?
onCreate(o) {
// This works (using lodash)
this.setState({ qs: _.concat(this.state.qs, { id: this.getNextID(), ...o }) });
// Is this not the same like the above?
// let newQuestionnaire = {id: this.getNextID(), title: o.title, description: o.description};
// let questionnaires = this.state.qs.push(newQuestionnaire);
// this.setState({
// qs: questionnaires,
// });
}
Редактировать: может быть, это кому-то поможет: первое, что появляется в Google, это push
:
—> Не делайте этого.
Комментарии:
1. Не используйте
.push()
для изменения состояния. Это не чисто. Состояние должно быть изменено только с помощью чистых операций. Кроме того,.push()
возвращает длину измененного массива, а не массива. Если вы хотите сделать это без Lodash, вы можете сделатьlet questionnaires = this.state.qs.concat(newQuestionnaire);
2. Я не знаю Lodash, но изменять состояние, как вы это делали (через push), — преступление. Сначала вы должны скопировать состояние типа (здесь я его мелко копирую): let questions = […this.state.qs]; а затем questions.push(newQuestionnaire); И в конце this.setState …
Ответ №1:
Новое свойство длины объекта, для которого был вызван метод
попробуйте это
let newQuestionnaire = {id: this.getNextID(), title: o.title, description: o.description};
this.setState({qs: [...this.state.qs, thisquestionnaires]})