在 React 中使用计时器时,使用 HighchartsReact 更新图表不起作用

Update chart with HighchartsReact is not working when a timer is used in React

我有使用 Highchart 和 React 在我的页面上显示数据的代码

  var chart_nps_amigo = {
    title: { text: '% Alunos x total de horas de acesso' },
    chart: { height: 200, type: 'column' },
    xAxis: {
      type: 'category',
      labels: {
          rotation: -45,
          style: {
              fontSize: '13px',
              fontFamily: 'Verdana, sans-serif'
          }
      }
    },
    yAxis: {
        title: { text: 'Número de alunos' }
    },
    tooltip: {
        pointFormat: 'Porcentagem: <b>{point.y:.1f} alunos</b>'
    },
    series: [{
      name: 'Alunos',
      data: [
          ['Nunca acessou', 24.2],
          ['Até 4h', 10.8], 
          ['Até 8h', 22.5], 
          ['Até 12h', 11],
          ['Até 16h', 9.3],
          ['Mais de 16h', 4.8]
      ],
      dataLabels: {
          enabled:   true,
          align: 'center',
          format: '{point.y:.1f}', // one decimal
          y: 10, 
          style: {
              fontSize: '11px',
              fontFamily: 'Verdana, sans-serif'
          }
      }
    }]

  }

我可以使用以下代码在我的页面中显示图表

<HighchartsReact
          highcharts={Highcharts}
          options={chart_nps_amigo}
          allowChartUpdate={true}
        />

使用下面的代码我可以更新图表

      chart_nps_amigo.series[0].data.push( ['32h v1', 55] );

但我想使用来自使用 Redux 和 Redux-Saga 的 Web 服务器的值更新图表。

为了模拟这一点,我使用以下代码创建了一个计时器事件来更新图表:

const timer = setTimeout(() => {
  chart_nps_amigo.series[0].data.push( ['32h v2', 24.8] );
  console.log('This will run after 10 second!')
}, 10000);

但 10 秒后,日志代码显示在浏览器控制台中,但图表未更新。

我怎样才能完成这项工作?

您应该将您的配置保持在组件状态并在那里更新您的数据,就像这里所做的那样:https://github.com/highcharts/highcharts-react#optimal-way-to-update

我现在找到解决办法了。基于@SebastianWędzel

的回答

按照我之前描述数据的方式,它是 javascript 中的数组,但它不是有效的 json 对象。

series: [{
  name: 'Alunos',
  data: [
      ['Nunca acessou', 24.2],
      ['Até 4h', 10.8], 
      ['Até 8h', 22.5], 
      ['Até 12h', 11],
      ['Até 16h', 9.3],
      ['Mais de 16h', 4.8]
  ],

但是由于我使用 redux 和 redux-saga 从 Web 服务器恢复了这个值,我需要一种方法来添加有效的 Json 对象。

当我查看 Highcharts 文档时,我找到了另一种使用有效 Json 对象显示系列数据的方法

series: [{
  name: 'Alunos',
  data: [{
    "name": "Nunca acessou",
    "y": 24.2
  }, {
    "name": "Até 4h",
    "y": 10.8
  }],      

现在我将从 Web 服务器获取的值仅附加到图表的系列数据部分

series: [{
  name: 'Alunos',
  data: chart.myData,
  

现在可以使用了。