Ошибка: ошибка Highcharts # 13: www.highcharts.com/errors/13/ in Reactjs - PullRequest
1 голос
/ 02 февраля 2020

Я пытаюсь использовать High-чарты в reactjs, и я новичок в обоих. В начале все было хорошо, но теперь я не могу решить эту ошибку.

Вот мой код:

Array.prototype.contains = function (v) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] === v) return true;
  }
  return false;
};

Array.prototype.unique = function () {
  var arr = [];
  for (var i = 0; i < this.length; i++) {
    if (!arr.contains(this[i])) {
      arr.push(this[i]);
    }
  }
  return arr;
}
export default class Chart extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      installs: [],
      isLoaded: false,
    }

    this.state = {
      filteredData: [],
      isLoadedFilteredData: false,
      showChart: true
    }

    this.state = {
      options: {}
    }

  }

  componentDidMount() {
    //  setInterval(() => {
    fetch('xyz)
      .then(res => res.json())
      .then(json => {
        this.setState({
          isLoaded: true,
          installs: json,


        });





      });






  }

  getFilteredData = async (operatingSystem, applicationServer, database, cloud, serverRelease) => {

    fetch(`xyz`)
      .then(res => res.json())
      .then(json => {
       // console.log(json);
        this.setState({
          isLoadedFilteredData: true,
          filteredData: json,
        }, console.log("getFilteredData called ... "));


      });

  }



  handleChange = ({ altered, name, text, value }) => {
    const nextFormValue = {
      [name]: {
        text,
        value,
        altered
      }
    };

    this.setState({ ...this.state, ...nextFormValue }, () =>

      console.log("handleChange()", this.state),

    );


  };


  render() {


    const { isLoaded, installs } = this.state;
    const { isLoadedFilteredData, filteredData } = this.state;

    if (!isLoaded) {
      return <p>Loading...</p>;
    }
    else {

      var arrayOS = []
      var arrayApp = []
      var arrayDB = []
      var arrayCloud = []
      var arrayServerRelease = []

      for (var i = 0; i < installs.length; i++) {

        arrayOS.push(this.state.installs[i].object.hardwareStackDetails.operatingSystem)
        arrayApp.push(this.state.installs[i].object.hardwareStackDetails.applicationServer)
        arrayDB.push(this.state.installs[i].object.hardwareStackDetails.database)
        arrayCloud.push(this.state.installs[i].object.cloud)
        arrayServerRelease.push(this.state.installs[i].object.serverRelease)

      }



      var operatingSystemTemp = arrayOS.unique();
      var applicationServerTemp = arrayApp.unique();
      var dataBaseTemp = arrayDB.unique();
      var cloudTemp = arrayCloud.unique();
      var serverReleaseTemp = arrayServerRelease.unique();

      arrayOS = []
      arrayApp = []
      arrayDB = []
      arrayCloud = []
      arrayServerRelease = []

      for (var i = 0; i < operatingSystemTemp.length; i++) {
        arrayOS.push({
          text: operatingSystemTemp[i],
          value: operatingSystemTemp[i]
        })
      }
      for (var i = 0; i < applicationServerTemp.length; i++) {
        arrayApp.push({
          text: applicationServerTemp[i],
          value: applicationServerTemp[i]
        })
      }
      for (var i = 0; i < dataBaseTemp.length; i++) {
        arrayDB.push({
          text: dataBaseTemp[i],
          value: dataBaseTemp[i],

        })
      }
      for (var i = 0; i < cloudTemp.length; i++) {
        arrayCloud.push({
          text: cloudTemp[i],
          value: cloudTemp[i]
        })
      }
      for (var i = 0; i < serverReleaseTemp.length; i++) {
        arrayServerRelease.push({
          text: serverReleaseTemp[i],
          value: serverReleaseTemp[i]
        })
      }


      if (isLoadedFilteredData){
      if(filteredData.length === 0) {

        console.log("filteredData")


        mapNew = new Map();
        labelMap = {};
        xlabels = []
        seriesDataValue = []



        Highcharts.chart('container', {

          title: {
             text: ''
          },

          subtitle: {
            // text: 'Source: thesolarfoundation.com'
          },


          xAxis: {


            categories: xlabels
          },

          legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle'
          },



          series: seriesDataValue,

          responsive: {
            rules: [{
              condition: {
                maxWidth: 500
              },
              chartOptions: {
                legend: {
                  layout: 'horizontal',
                  align: 'center',
                  verticalAlign: 'bottom'
                }
              }
            }]
          }

        }
        );

      }
      else {


          console.log(filteredData)


          var mapNew = new Map();
          var labelMap = {};
          var xlabels = []
          var seriesDataValue = []

          for (var j = 0; j < filteredData.length; j++) {

            if (filteredData[j].object.status === "PASS") {

              var date1 = moment(filteredData[j].object.creationTime);
              var date2 = moment(filteredData[j].object.updationTime);

              var ms = moment(date2, "DD/MM/YYYY HH:mm:ss").diff(moment(date1, "DD/MM/YYYY HH:mm:ss"));
              var d = moment.duration(ms);
              //  var s = d.format("hh:mm:ss");

              console.log(ms)
              console.log(d.hours())

              var timeInhrs = d.hours()

              if (mapNew.has(filteredData[j].object.clientBuild)) {

                //    timeInhrs = ((timeInhrs + mapNewInnerTemp.get(this.state.kuch[j].object.clientBuild)));

                console.log(this.state.filteredData[j].object.clientBuild + "  " + timeInhrs);
                mapNew.set(this.state.filteredData[j].object.clientBuild, timeInhrs);


              } else {
                console.log(this.state.filteredData[j].object.clientBuild + "  " + timeInhrs);


                mapNew.set(this.state.filteredData[j].object.clientBuild, timeInhrs);

                labelMap[this.state.filteredData[j].object.clientBuild] = 0; ///



                //count = count + 1;


              }

            }
          }
          console.log(mapNew)



          for (var key in labelMap) {

            xlabels.push(key);
          }

          console.log(xlabels)

          var dataValue = [] // array
          for (const entry of mapNew.entries()) {


            console.log(entry)

            for (var key in labelMap) {

              if (key === entry[0]) {

                dataValue.push(entry[1])
              }

            }


          }
          console.log(dataValue)

          seriesDataValue.push(
            {

              data: dataValue,

            })

          console.log(seriesDataValue)


          var elementExists = document.getElementById("container");
          if(elementExists === null){
            let div = document.createElement("div");
            div.id="container";
            div.id="select"
            document.body.appendChild(div);
          }


          Highcharts.chart('container', 

            xAxis: {


              categories: xlabels
            },

            legend: {
              layout: 'vertical',
              align: 'right',
              verticalAlign: 'middle'
            },



            series: seriesDataValue,

            responsive: {
              rules: [{
                condition: {
                  maxWidth: 500
                },
                chartOptions: {
                  legend: {
                    layout: 'horizontal',
                    align: 'center',
                    verticalAlign: 'bottom'
                  }
                }
              }]
            }

          }
          );

        } 

    }

      return (
        <div>

          <div id="container"> </div>



        </div>
      );

    }



  }


}

Вышеуказанная ошибка исчезает после обновления страницы.

1 Ответ

0 голосов
/ 20 февраля 2020

Ошибка связана с тем, что вы создаете диаграмму до создания элемента div с идентификатором 'container'.

Однако, чтобы избежать таких проблем, я рекомендую использовать официально поддерживаемую оболочку Highcharts для реакции: https://www.npmjs.com/package/highcharts-react-official

...