Highcharts не отображаются: React+Typescript+Highcharts

Попытка поднять highchart с помощью реакции. У меня есть несколько вызовов fetch API (для иллюстрации я добавил только 2), данные которых я буду использовать для рендеринга чего-либо в пользовательском интерфейсе.

В этом примере data1 используется для рендеринга таблицы, data2 используется для рендеринга highchart.

Я сохраняю результаты этих вызовов в объекте состояния. Когда я вызываю эти API, я получаю данные, но не могу установить для них свойство «серия» highcharts для рендеринга, в результате ничего не рендерится.

Структура данных, которые я получаю

«api2»: [ { «имя»: «Test1», «значение»: 12}, { «имя»: «Test2», «значение»: 9 } ]

Может кто-то помочь мне с этим? Где я ошибаюсь?

Я использую для этого highcharts-react-official

Код

import * as React from 'react';
import Highcharts from 'highcharts'
import HighchartsReact from 'highcharts-react-official';

interface IState {
  data1: [];
  data2: [];
}

interface IProps {}

class Example extends React.Component<IProps,IState> {
  constructor(props:any)
  {
    super(props);
    this.state = {
       data1: [],
       data2: []
    }
  }

  componentDidMount()
  {
      Promise.all([
        fetch('http://localhost:3001/api1'),
        fetch('http://localhost:3001/api2')
      ])
      .then(([res1, res2]) => Promise.all([res1.json(), res2.json()]))
       .then(([data1, data2]) => this.setState({
         data1: data1, 
         data2: data2
      }));
  }

  render() {    
    let options:any;
    options = {
         chart: {
            type: 'column'
         },
      credits: false,
      exporting: {enabled: false},
      title: {
        text: ''
      },
      legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'bottom'
            },
      xAxis: {
        visible:false
      },
      yAxis: {
        visible:false
      },
      plotOptions: {
        column: {
          dataLabels: {
                        enabled: true                         }
        }
      },
      series: this.state.data2
     };

    return(
      <div className="an-content">
          //some table rendering will happen here
          <HighchartsReact
                 highcharts={Highcharts}
                 options={options} 
          />
      </div>
    )
  }
} 
export default Example;

person VJR08    schedule 10.04.2019    source источник
comment
Формат должен быть {"name":"Test 1",y:12} . Подробнее здесь   -  person Core972    schedule 10.04.2019
comment
@Core972 пытался! не повезло   -  person VJR08    schedule 10.04.2019


Ответы (1)


Вам необходимо указать формат данных, требуемый Highcharts:

  this.setState({
      data2: data2.map(x => ({ name: x.name, data: [x.value] }))
  });

Демонстрация в реальном времени: https://codesandbox.io/s/7w2pw4p900.

Справочник по API: https://api.highcharts.com/highcharts/series.column.data

person ppotaczek    schedule 10.04.2019
comment
Потрясающий ! Работал. Спасибо за ответ . Пришлось анализировать Int, прежде чем назначать его свойству данных. - person VJR08; 10.04.2019
comment
Привет @velsonjr, я рад, что смог помочь. Вы можете принять ответ: stackoverflow.com/help/someone-answers - person ppotaczek; 10.04.2019