使用useState挂钩更新函数后,React将不会更新状态

时间:2019-09-29 00:45:55

标签: reactjs react-hooks victory-charts

无法使用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 :(得分:0)

您需要对代码进行简单的更改:

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

也许您需要使用钩子useCallback来检查ChangeData方法,以避免无限重渲染(如果发生这种情况)。