Состояние не обновляется при нажатии «Сохранить» - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь обновить состояние, когда нажимаю «Сохранить» после установки набора элементов в компоненте TransferList, созданного Material-UI. Проблема в том, что когда я нажимаю «Сохранить», он не обновляется. Если я щелкаю снова или взаимодействую с компонентом, он обновляется.

Я создал код в Code SandBox, чтобы вам не приходилось понимать, что я говорю. Код уже работает, и я поместил ниже список из девяти пунктов, объясняющих, в чем именно заключается моя проблема. Вот ссылка: https://codesandbox.io/s/question-about-hook-state-f3jtl

Я подозреваю, что useEffect может быть решением. Я не могу выяснить, как вызвать его, просто нажав «Сохранить», чтобы избежать проблем с производительностью. Вы можете спросить: «Почему вы обновляете« правильное »состояние, чтобы сразу после этого пытаться обновить« data.items »? ужасающим.

1 Ответ

1 голос
/ 12 октября 2019

Ваш код работает хорошо, но если вы хотите напечатать правильное состояние в событии, измените его на:

 const handleClick = () => {
    setData(prevState => {
      let newState = { ...prevState, items: right };
      console.log("handleClick", newState);

      return newState;
    });

    //  console.log("handleClick", data);
    //  console.log("right", right);
  };

В отличие от метода setState, найденного в компонентах класса, useState не объединяет объекты обновления автоматически. Вы можете повторить это поведение, комбинируя функцию обновления.

здесь исправлен пример: https://codesandbox.io/s/question-about-hook-state-sb0jo

...