单击图表元素时如何重定向用户

时间:2018-09-04 07:42:17

标签: javascript reactjs react-chartjs

我正在使用react-chartJs-2库来显示图表。假设用户单击条形图/甜甜圈图部分,则必须将其重定向到特定页面。以下是我为DoughnutChart做的代码:

  1. ChartDisplay.jsx
<div className="DonutChartSection" >
   <Doughnut labelArray = {this.state.labelArr} DataArray = {this.state.DoughnutDataArr} colorArray = {this.state.DoughnutColorArr} title={"Employees"} />
</div>
  1. Doughnut.jsx

    import React from 'react';
    import {Doughnut} from 'react-chartjs-2';
    
    Chart.defaults.global.defaultFontStyle = 'Bold';  
    Chart.defaults.global.defaultLegendPosition = 'left';
    
    export default class DoughnutChartView extends React.Component{
      constructor(props) {
         super(props);
         this.state = { };
      }
    
      render() {
        let data = {
            labels: this.props.labelArray,
            datasets: [{
                data: this.props.DataArray,
                backgroundColor: this.props.colorArray,
                hoverBackgroundColor: this.props.colorArray,
            }]
        } 
        return (
          <div>
          <span className="titleName" >{this.props.title}</span> 
            <Doughnut data={data}  />
          </div>
        );
      }
    };
    

我浏览了github页面,发现以下事件可用于click事件,但无法弄清楚如何在代码中使用它。

  

https://github.com/jerairrest/react-chartjs-2#onelementsclick--getelementsatevent-function

2 个答案:

答案 0 :(得分:3)

实际上,您实际上已经回答了您的问题:onElementsClick可用于在用户单击图表元素时执行操作。 onElementsClick是图表本身的支撑,因此:

<Doughnut data={data} onElementsClick={elems => {
    // if required to build the URL, you can 
    // get datasetIndex and value index from an `elem`:
    console.log(elems[0]._datasetIndex + ', ' + elems[0]._index);
    // and then redirect to the target page:
    window.location = "https://example.com";
}} />

请注意,elems可能包含多个元素,例如,在堆积的条形图的情况下(在这种情况下,它包括单击的条形的所有元素)。

答案 1 :(得分:1)

这是点击饼图的快速解决方案

import { Pie } from 'react-chartjs-2'
        <Pie
            getElementAtEvent={(data) => {
                if(data.length >= 1){
                    const dataItem: any  = data[0]
                    const index = dataItem.index
                    const foundLabel = props.labels[index]
                    // redirect or do stuff
                }
            }}