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}});

Это распространит все предыдущие значения в новый объект, плюс тот, который вы хотите добавить.

Лично я всегда использую функциональный способ установки состояния, когда новое зависит от значения предыдущего состояния, но и здесь у вас все в порядке.

Другие вопросы по тегам