Реагируйте на собственную проблему setState, используя Object - PullRequest
1 голос
/ 08 апреля 2020

Не знаю, почему мой setQuantity не обновляет переменную «количество» с помощью setState. Внутри функции объект обновляется, но не переменная «количество».

const [quantity, setQuantity] = useState({breakfast: 0, lunch: 0, dinner: 0});

const onChangeQuantity = (value, type) => {
    let qty = quantity;
    qty[type] = value;

    //console.log(qty);  
    //{"breakfast": 0, "dinner": 0, "lunch": 6}

    setQuantity(qty);
  };

Консоль показывает, что последнее изменение было 6 обедов. У меня есть консоль для «количества» вне функции, чтобы видеть, изменяется ли, но показывает только значения инициализации (0, 0, 0), когда экран загружен.

Preview

Не могли бы вы помочь мне исправить это?

Спасибо.

1 Ответ

2 голосов
/ 08 апреля 2020

Та же старая ошибка, вы изменяете состояние, не делайте этого. Всегда устанавливайте новую ссылку для запуска рендера с обновленными значениями

const [quantity, setQuantity] = useState({breakfast: 0, lunch: 0, dinner: 0});

const onChangeQuantity = (value, type) => {
    let qty = { ... quantity }; // make a copy
    qty[type] = value;
    setQuantity(qty);
};
...