Реагировать на проблему с вложенным объектом setstate - PullRequest
0 голосов
/ 17 июня 2020

Я не могу решить эту setState вторую ночь, и я уже в отчаянии. У меня есть сильно вложенный объект, который я пытаюсь обновить. В случае, если у меня есть несколько элементов в todaysMenu, и я пытаюсь обновить состояние для второго элемента, весь массив «сохраняется» в первом элементе todaysMenu.

onChangeAnyValue(values, itemIndex) {
        const key = Object.keys(values.x)[0];
        const provideDate = values.date;
        this.setState(prevState => ({
            data: prevState.data.map(day => day.date === provideDate ? {
                ...day,
                todaysMenu: [{
                    ...day.todaysMenu,
                    [itemIndex]: {
                        ...day.todaysMenu[itemIndex],
                        dish: {
                            ...day.todaysMenu[itemIndex].dish,
                            [key]: values.x[key]
                        }
                    }
                }]
            } : day)
        }));
    }

В случае, если я удаляю квадратные скобки, он хранится как просто объектов.

Before

After

Спасибо за ваше время!

1 Ответ

1 голос
/ 17 июня 2020

Вы захотите изменить:

todaysMenu: [{
  ...day.todaysMenu,
  [itemIndex]: {
    ...day.todaysMenu[itemIndex],
    dish: {
      ...day.todaysMenu[itemIndex].dish,
      [key]: values.x[key]
    }
  }
}]

... на:

todaysMenu: day.todaysMenu.map((item, index) => 
  index === itemIndex
    ? { ...item, dish: { ...item.dish, [key]: values.x[key] } }
    : item
)

То, что у вас сейчас есть, создает массив с одним объектом вместо преобразования массива в модифицированный массив.

...