最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React如何以Hook的方式使用Echarts

 更新時間:2024年03月14日 09:04:51   作者:tygkking  
這篇文章主要介紹了React如何以Hook的方式使用Echarts問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

背景

目前組內(nèi)在開發(fā)的項(xiàng)目使用的雖然是React,但是并不是之前的類式組件,所以寫法有不少的區(qū)別

經(jīng)過查閱之后,現(xiàn)以Hook的方式使用Echarts,在此進(jìn)行總結(jié),方便之后的學(xué)習(xí)。

步驟

安裝Echarts

首先引入Echarts的模塊

npm install echarts --save

如果你使用的是 Typescript ,那么還需要引入 @types/echarts

npm install @types/echarts --save

代碼中引入Echarts

有兩種方式,二選其一,按需引入全部引入,各有優(yōu)劣,各位可自行選擇

按需引入

代碼如下,使用了echarts,line,tooltip,legend

import echarts from 'echarts/lib/echarts'
import 'echarts/lib/chart/line'
import 'echarts/lib/component/title'
import 'echarts/lib/component/tooltip'

按需引入的優(yōu)點(diǎn)是最后打包生成的文件較小,一般會采用這種方法

全部引入

import echarts from 'echarts'

使用Echarts

React自從新增了Hook特性以后,使用函數(shù)式組件,需要改動一定的地方。

使用useEffect代替之前的初始化函數(shù)

提示

  • 如果你熟悉 React class 的生命周期函數(shù)
  • 你可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 這三個函數(shù)的組合。

初始化圖表

使用getElementById初始化

綜上,可以在 useEffect 中寫原先在 componentDidMount() 的初始化圖表的函數(shù)

let element = document.getElementById('main');
let myChart = echarts.init(element as HTMLDivElement);
let option = {
    title: {
        text: 'ECharts 入門示例',
    },
    tooltip: {
    },
    legend: {
        data:['銷量', '利潤', '比率']
    },
    xAxis: {
        data: ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
    },
    yAxis: {
    },
    series: [
        {
            name: '銷量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
        },
        {
            name: '利潤',
            type: 'bar',
            data: [30, 25, 15, 20, 20, 35]
        },
        {
            name: '比率',
            type: 'line',
            data: [35, 30, 20, 25, 25, 40]
        }]
    };
myChart.setOption(option);

DOM中代碼如下

<div>
    <div id={'main'} style={{height: 400}}/>
</div>

使用Ref引用初始化

除了上述的使用getElementById的方法以外,還可以使用ref引用的方式,如以下代碼所示,最后在useEffect里調(diào)用renderChart

 const main2 = useRef(null);
 let chartInstance = null;

 let renderChart = () => {
     const myChart = echarts.getInstanceByDom(main2.current as unknown as HTMLDivElement);
     if(myChart)
         chartInstance = myChart;
     else
         chartInstance = echarts.init(main2.current as unknown as HTMLDivElement);
     chartInstance.setOption({
         title: {
             text: '燃盡圖'
         },
         tooltip: {
             trigger: 'axis'
         },
         toolbox: {
             feature: {
                 saveAsImage: {}
             }
         },
         legend: {
             data: ['Remain', 'Ideal']
         },
         xAxis: {
             boundaryGap: false,
             type: 'category',
             data: ['1-1', '1-2', '1-3', '1-5', '1-6', '1-7', '1-8', '1-9']
         },
         yAxis: {
             type: 'value'
         },
         series: [
             {
                 name: 'Remain',
                 data: [140, 110, 100, 90, 70, 30, 10, 0],
                 type: 'line'
             },
             {
                 name: 'Ideal',
                 data: [140, 120, 100, 80, 60, 40, 20, 0],
                 type: 'line'
             }
         ]
     })
 };

DOM中代碼如下

<div>
    <div style={{height: 400}} ref={main2}/>
</div>

整體代碼

整體的代碼如下所示

import React, {useEffect, useRef, useState} from "react";
import echarts from 'echarts';

const Test: React.FC =  () => {
    const main2 = useRef(null);
    let chartInstance = null;

    let renderChart = () => {
        const myChart = echarts.getInstanceByDom(main2.current as unknown as HTMLDivElement);
        if(myChart)
            chartInstance = myChart;
        else
            chartInstance = echarts.init(main2.current as unknown as HTMLDivElement);
        chartInstance.setOption({
            title: {
                text: '燃盡圖'
            },
            tooltip: {
                trigger: 'axis'
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            legend: {
                data: ['Remain', 'Ideal']
            },
            xAxis: {
                boundaryGap: false,
                type: 'category',
                data: ['1-1', '1-2', '1-3', '1-5', '1-6', '1-7', '1-8', '1-9']
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                    name: 'Remain',
                    data: [140, 110, 100, 90, 70, 30, 10, 0],
                    type: 'line'
                },
                {
                    name: 'Ideal',
                    data: [140, 120, 100, 80, 60, 40, 20, 0],
                    type: 'line'
                }
            ]
        })
    };

    let initChart = () => {
        let element = document.getElementById('main');
        let myChart = echarts.init(element as HTMLDivElement);
        let option = {
            title: {
                text: 'ECharts 入門示例',
            },
            tooltip: {
            },
            legend: {
                data:['銷量', '利潤', '比率']
            },
            xAxis: {
                data: ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
            },
            yAxis: {
            },
            series: [
                {
                    name: '銷量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20]
                },
                {
                    name: '利潤',
                    type: 'bar',
                    data: [30, 25, 15, 20, 20, 35]
                },
                {
                    name: '比率',
                    type: 'line',
                    data: [35, 30, 20, 25, 25, 40]
                }]
        };
        myChart.setOption(option);
    };
    
    useEffect(() => {
        initChart();
        renderChart();
    });

    return(
        <div>
            <div id={'main'} style={{height: 400}}/>
            <div style={{height: 400}} ref={main2}/>
        </div>
    );
};

export default Test

最終效果

最后的結(jié)果如下圖所示

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • ForwardRef?useImperativeHandle方法demo

    ForwardRef?useImperativeHandle方法demo

    這篇文章主要為大家介紹了ForwardRef?useImperativeHandle方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • react實(shí)現(xiàn)路由動畫跳轉(zhuǎn)功能

    react實(shí)現(xiàn)路由動畫跳轉(zhuǎn)功能

    這篇文章主要介紹了react路由動畫跳轉(zhuǎn)功能,大概思路是下載第三方庫?引用,創(chuàng)建css文件引用,想要實(shí)現(xiàn)跳轉(zhuǎn)動畫功能,就在那個組件的根節(jié)點(diǎn)綁定classname屬性即可,在跳轉(zhuǎn)的時候即可實(shí)現(xiàn),需要的朋友可以參考下
    2023-10-10
  • Zustand介紹與使用 React狀態(tài)管理工具的解決方案

    Zustand介紹與使用 React狀態(tài)管理工具的解決方案

    本文主要介紹了Zustand,一種基于React的狀態(tài)管理庫,Zustand以簡潔易用、靈活性高及最小化原則等特點(diǎn)脫穎而出,旨在提供簡單而強(qiáng)大的狀態(tài)管理功能
    2024-10-10
  • 詳解React Fiber的工作原理

    詳解React Fiber的工作原理

    這篇文章主要介紹了React Fiber的工作原理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04
  • React + Redux 從單向數(shù)據(jù)流到閉環(huán)實(shí)現(xiàn)

    React + Redux 從單向數(shù)據(jù)流到閉環(huán)實(shí)現(xiàn)

    本文徹底剖析 React、Redux 及 Store、Action、Reducer 之間的邏輯關(guān)系與實(shí)現(xiàn)原理,構(gòu)建一個完整的“數(shù)據(jù)流閉環(huán)”認(rèn)知模型,感興趣的可以了解一下
    2026-06-06
  • React 添加引用路徑時如何使用@符號作為src文件

    React 添加引用路徑時如何使用@符號作為src文件

    這篇文章主要介紹了React 添加引用路徑時如何使用@符號作為src文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • React實(shí)現(xiàn)數(shù)字滾動組件numbers-scroll的示例詳解

    React實(shí)現(xiàn)數(shù)字滾動組件numbers-scroll的示例詳解

    數(shù)字滾動組件,也可以叫數(shù)字輪播組件,這個名字一聽就是非常普通常見的組件。本文將利用React實(shí)現(xiàn)這一組件,感興趣的小伙伴可以了解一下
    2023-03-03
  • 基于react hooks,zarm組件庫配置開發(fā)h5表單頁面的實(shí)例代碼

    基于react hooks,zarm組件庫配置開發(fā)h5表單頁面的實(shí)例代碼

    這篇文章主要介紹了基于react hooks,zarm組件庫配置開發(fā)h5表單頁面,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • React18系列commit從0實(shí)現(xiàn)源碼解析

    React18系列commit從0實(shí)現(xiàn)源碼解析

    這篇文章主要為大家介紹了React18系列commit從0實(shí)現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • React框架核心原理全面深入解析

    React框架核心原理全面深入解析

    React是前端開發(fā)每天都用的前端框架,自然要深入掌握它的原理。我用 React 也挺久了,這篇文章就來總結(jié)一下我對 react 原理的理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-11-11

最新評論

德安县| 新余市| 商洛市| 巴青县| 汾西县| 象州县| 庆城县| 阳江市| 河西区| 乐亭县| 抚松县| 建始县| 惠来县| 乐昌市| 衡阳县| 洮南市| 宿迁市| 扎鲁特旗| 安福县| 都昌县| 海盐县| 南昌市| 义乌市| 土默特左旗| 澎湖县| 丹棱县| 漳浦县| 依安县| 绥中县| 北川| 仁寿县| 丹棱县| 明溪县| 康平县| 象山县| 集安市| 渭南市| 石柱| 老河口市| 庐江县| 沅陵县|