为什么 afterSetExtremes 函数被调用两次 highcharts 使用 react

why is afterSetExtremes function being called twice highcharts using react

我想实现这里显示的延迟加载功能。

jsfiddle.net/uf34oecg/

如果您检查它的控制台,它只会在第一次加载图表时打印一次 loadInitialData。 然后它永远不会打印它,或者一旦你 select 1m (第一次加载后),它调用 afterSetExtremes 函数并打印 afterSetExtremes.


我发现相同的示例转换为 reactjs 代码

https://codesandbox.io/s/highcharts-react-demo-forked-wvrd6?file=/demo.jsx:673-688

在此示例中,当您第一次加载时,它会调用 afterSetExtremes 两次,这是错误的。它不应在初始加载时调用 afterSetExtremes

我不明白为什么会这样?我花了几个小时后无法弄清楚。

因此,它在实际项目中表现不佳。

那是因为有不同的动作顺序。

使用 React:

  1. 创建的图表没有数据
  2. 收到数据并更新图表

没有反应:

  1. 收到数据
  2. 图表已创建

作为解决方案,您可以在 useEffect 中调用 loadInitialData hook 并在收到数据后渲染 HighchartsReact 组件。

const ChartComponent = () => {
  const [options, setOptions] = useState(null);

  useEffect(() => {
    loadInitialData();
  }, []);

  function loadInitialData() {
    fetch(dataURL)
      .then((res) => res.ok && res.json())
      .then((data) => {
        ...
        setOptions({
          ...chartOptions,
          series: [
            {
              data
            }
          ],
          ...
        });
      });
  }

  function afterSetExtremes(e) {
    ...
  }

  return (
    options && (
      <HighchartsReact
        constructorType="stockChart"
        highcharts={Highcharts}
        options={options}
      />
    )
  );
};

现场演示: https://codesandbox.io/s/highcharts-react-3tcdw7?file=/demo.jsx