1. 程式人生 > 其它 >在React中使用echarts,封裝echarts元件

在React中使用echarts,封裝echarts元件

技術標籤:reactjsechartsreact

01、在React中使用echarts

開始先百度如何在react專案中使用echarts。

按照百度到的步驟寫,安裝然後引入echars-for-react這個包。

編譯沒有錯。

但是瀏覽器報錯:

dispose 和 getInstanceByDom 的prototype undefinded。

因為我用的是函式式元件,沒有生命週期。我一開始懷疑是不是因為函式式元件的問題。

我換成了類元件之後,還是報同樣的錯。

沒辦法我只能去官網,按照官方的在 webpack 中使用 ECharts。

如下所示成功了!

import './index.css'
; import React, { Component } from 'react' // import ReactEcharts from "echarts-for-react" import * as echarts from 'echarts' export class Index extends Component { componentDidMount(){ this.getOption() } getOption = () => { var myChart = echarts.init(document.getElementById
('main')); myChart.setOption({ title: { text: 'ECharts 入門示例' }, tooltip: {}, xAxis: { data: ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子'] }, yAxis: {}, series: [{ name: '銷量', type: 'bar', data: [5, 20, 36, 10, 10,
20] }] }); } render() { return ( <div id="main" style={{height:"300px"}}> </div> ) } } ReactDOM.render( <Index />, document.getElementById('root') );

之後我就按照這個方式 ,在自己的專案中使用封裝了echtarts元件。

新的問題

echars是使用成功了。但是給表格設定寬度為100%的時候,圖表的大小會超過父元素,溢位螢幕。

百度了下

原來是echarts圖表只繪製一次,繪製的時候會自動獲取父級的大小填寫寬度。

所有讓echarts延時繪製。

 componentDidMount () {
        setTimeout(() => {
        this.getOption()
        })
    }

**完整程式碼如下:**echarts元件封裝成功。

import React, { Component } from 'react'
import * as echarts from 'echarts'
export class Index extends Component {
    
    componentDidMount () {
        setTimeout(() => {
        this.getOption()
        })
    }

    getOption = () => {
        var myChart = echarts.init(document.getElementById('main'));
        myChart.setOption({
            title: {
                text: '場站趨勢分析'
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['充電次數', '充電量', '充電時長', '消費金額']
            },
            xAxis: {
                type: 'category',
                boundaryGap: false,
                data: ['0', '1', '2', '3', '4', '5', '6']
            },
            yAxis: {
                type: 'value'
            },
            grid: {
                left: '3%',
                right: '4%',
                top: "2%"
            },
            series: [
                {
                    name: '充電次數',
                    type: 'line',
                    data: [120, 132, 101, 134, 90, 230, 210],
                    smooth: true
                },
                {
                    name: '充電量',
                    type: 'line',
                    data: [220, 182, 191, 234, 290, 330, 310],
                    smooth: true
                },
                {
                    name: '充電時長',
                    type: 'line',
                    data: [150, 232, 201, 154, 190, 330, 410],
                    smooth: true
                },
                {
                    name: '消費金額',
                    type: 'line',
                    data: [320, 332, 301, 334, 390, 330, 320],
                    smooth: true
                }
            ]
})
}

  render() {
    return (
      <div id = "main" style={{ height: '550px', width:"100%",backgroundColor:'#fff'}}>
      </div>
    )
  }
}

export default Index