SetState в массиве с оператором React распространения
У меня есть значение в моем состоянии реакции, которое выглядит так:
appointmentsData = {
"05-01-2018": [
{
id: "1",
friendly: "9:00am - 10:00am",
openDateTime: "9:00am",
closeDateTime: "10:00am"
}
]
};
У меня есть новый кусок данных:
const newAppt = {"06-30-2018":[]}
Как мне добавить свои данные в штат? Я старался
this.setState({ ...this.state.appointmentsData, ...newAppt});
Это, кажется, не добавляет к состоянию, хотя. Я возвращаю то же значение в рендере, что и раньше (assignData до распространения). NewAppt никогда не добавляется в состояние.
Я пытаюсь получить желаемый результат для моих состояний:
appointmentsData = {
"05-01-2018": [
{
id: "1",
friendly: "9:00am - 10:00am",
openDateTime: "9:00am",
closeDateTime: "10:00am"
}
],
"06-30-2018": []
};
2 ответа
Вы не должны использовать спред оператора на newAppt
, Просто зайдите с:this.setState({ ...this.state.appointmentsData, newAppt});
, Мне кажется, что оператор распространения на newAppt
не получает никаких данных для const
,
Много способов сделать это, правда. Вот один из них:
this.setState(prevState => (
{appointmentsData: {...prevState.appointmentsData}, newAppt}
));
Хотя ваш подход должен работать, если вы просто добавите appointmentsData:
первый. Вот так:
this.setState({appointmentsData: {...this.state.appointmentsData, ...newAppt}});
Это распространит все предыдущие значения в новый объект, плюс тот, который вы хотите добавить.
Лично я всегда использую функциональный способ установки состояния, когда новое зависит от значения предыдущего состояния, но и здесь у вас все в порядке.