React не будет обновлять состояние после использования функции обновления ловушки useState - PullRequest
0 голосов
/ 29 сентября 2019

Невозможно установить состояние, используя функцию, возвращаемую из ловушки useState.

Оборачивая больше функций и регистрируя их в любой возможной точке, он успешно асинхронно получает новые данные вплоть до вызова setData, который я могуне найти способ достичь пика внутри.Я также проверил перед рендерингом, чтобы увидеть, изменяются ли данные в состоянии, но не на веб-странице, но объект данных не изменяется в значении после вызова setData.

function PollResults(props) {
  const classes = useStyles2();
  const [data, setData] = useState([]);

  const changeData = data => {
    console.log(data);
    setData(data);
  };

  useEffect(() => {
    subscribeToResults(props.id, data => {
      //console.log(data);
      changeData(data);
    });
    return () => {
      unsubscribeToResults(props.id);
    };
  }, [props.id, setData]);
  //console.log(data);
  return <VictoryPie animate colorScale="qualitative" data={data} />;
}

1 Ответ

0 голосов
/ 29 сентября 2019

Вам нужно сделать простое изменение в своем коде:

function PollResults(props) {
  const classes = useStyles2();
  const [data, setData] = useState([]);

  const changeData = data => {
    console.log(data);
    setData([data]); // using [] around value.
  };

  useEffect(() => {
    subscribeToResults(props.id, data => {
      //console.log(data);
      changeData(data);
    });
    return () => {
      unsubscribeToResults(props.id);
    };
  }, [props.id, setData]);
  //console.log(data);
  return <VictoryPie animate colorScale="qualitative" data={data} />;
}

Возможно, вам нужно будет проверить свой метод ChangeData, используя хук useCallback, чтобы избежать бесконечного повторного рендеринга (если это произойдет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...