reactjs 将系列添加到highchart并删除加载,而不创建新图表

ulydmbyx  于 2023-01-02  发布在  React
关注(0)|答案(1)|浏览(102)

我用的是高查特和React。
目前我创建了一个启动选项:

/**
  * Initial chart options, with "loading" enabled
  */
  const chartOptions = {
    accessibility: {
      enabled: false
    },
    chart: {
      type: "column",
      events: {
        load() {
          const chart = this;
          chart.showLoading(`${LOADING}...`);
        }
      }
    }
  };

在这个组件中,我调用了一个API,它返回一些要使用的数据。因此,此时,我想删除“加载”并添加数据。
我暂时用以下公式求解:

const [options, setOptions] = useState(chartOptions);

useEffect(() => {
    if (detail) {
      setOptions({
        ...chartOptions,
        chart: {
          type: "column"
        },
        xAxis: {
          categories: detail.map(
            (item) =>
              `${item.data_em.substring(4, 6)}/${item.data_em.substring(0, 4)}`
          )
        },
        series: [
          {
            name: "Alfa",
            color: "#69BC66",
            data: detail.map((item) => item.ricevuti)
          },
          {
            name: "Beta",
            color: "#DC3545",
            data: detail.map((item) => item.mancanti)
          },
        ]
      });
    }
  }, [detail]);

<ChartComponent options={options} />

所以,当数据准备好时,在本地状态中设置一个新的选项。但我想象,以这种方式,我会得到一个不同的图表。
这是可行的,但有更好的方法吗?

2nbm6dog

2nbm6dog1#

使用highcharts-react-official Package 器时,仅当启用immutable选项时,才会在状态更新时重新创建图表。否则,仅调用chart.update方法来应用更改。
因此,最好只应用新选项。在您的情况下,它将是:

useEffect(() => {
  if (detail) {
    setOptions({
      chart: {
        type: "column"
      },
      xAxis: {
        categories: detail.map(
          (item) =>
          `${item.data_em.substring(4, 6)}/${item.data_em.substring(0, 4)}`
        )
      },
      series: [{
          name: "Alfa",
          color: "#69BC66",
          data: detail.map((item) => item.ricevuti)
        },
        {
          name: "Beta",
          color: "#DC3545",
          data: detail.map((item) => item.mancanti)
        },
      ]
    });
  }
}, [detail]);

实时演示:https://codesandbox.io/s/highcharts-react-demo-3lvomg?file=/demo.jsx
**文件:**www.npmjs.com/package/highcharts-react-official#optimal-way-to-update

相关问题