javascript - 如何在 Highcharts 事件监听器中访问 React 钩子(Hook)状态

标签 javascript reactjs highcharts

我正在尝试通过添加到现有状态来使用 React hook 来更新事件监听器中的状态:

import React, { useState } from 'react';
import { render } from 'react-dom';
import HighchartsReact from 'highcharts-react-official';
import Highcharts from 'highcharts';

const LineChart = () => {
  const [hoverData, setHoverData] = useState(null);
  const [hoveredOverCategories, setHoveredOverCategories] = useState([]);
  const [chartOptions, setChartOptions] = useState({
    xAxis: {
      categories: ['A', 'B', 'C'],
    },
    series: [
      { data: [1, 2, 3] }
    ],
    plotOptions: {
      series: {
        point: {
          events: {
            mouseOver(e){
              console.log(hoveredOverCategories); // Always prints the empty array `[]`
              setHoverData(e.target.category);
              setHoveredOverCategories(
                [...hoveredOverCategories, e.target.category]
              );
            }
          }
        }
      }
    }
  });

  return (
      <div>
        <HighchartsReact
          highcharts={Highcharts}
          options={chartOptions}
        />
        <h3>Hovering over {hoverData}</h3>
        <ol>
          {hoveredOverCategories.map(category => (
            <li>Hovered over {category}</li>
          ))}
        </ol>
      </div>
    )
}

render(<LineChart />, document.getElementById('root'));

但是,事件监听器 (mouseOver) 似乎无法访问更新的状态 (hoveredOverCategories): console.log(hoveredOverCategories); 始终打印空数组[]

预期结果是为每个 mouseOver 事件添加类别数组。请参阅this demonstration 。但实际发生的情况是,数组仅被最新值覆盖。

(此复制基于 the documented optimal way to update ,演示了 here 。)

请注意,我能够使用类组件获得预期结果。

最佳答案

我认为通过闭包访问 hoveredCategories 并不是更精确的方法。我能够通过使用先前的状态而不是依赖于闭包值来访问它来使其工作:

mouseOver(e){
  console.log(hoveredOverCategories);
  setHoverData(e.target.category);
  setHoveredOverCategories((prevHoveredOverCategories) => {
    return [...prevHoveredOverCategories, e.target.category]
  });
}

看看它的工作原理:https://stackblitz.com/edit/highcharts-react-hook-state-event-listener-xxqscw

关于javascript - 如何在 Highcharts 事件监听器中访问 React 钩子(Hook)状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60055627/

相关文章:

javascript - 如何在模块化设计模式中嵌套函数?

javascript - React-Router 在主组件和侧边栏组件之间传递 props

javascript - 收到错误 - 如果对上面的列使用非字符串访问器,则需要列 ID - React

javascript - Highchart聚合JSON数据

javascript - Highcharts 面积范围图的 dygraph 等效项

javascript html5历史、变量初始化和popState

javascript - 为什么这段代码没有给我要上传的图像的正确尺寸

javascript - 从 ASP 调用 JavaScript

javascript - REACT,有一个滚动数字 1-10 的变量,并在 JSX 中的 return 语句中连接该变量。在屏幕上呈现之前,数字会滚动 2 倍

highcharts - x 轴刻度间隔在高库存图表中无法正常工作