国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在Vue和React中使用ECharts的多種方法

開發
俗話說:“工欲善其事,必先利其器”?,F如今已經有許多成熟易用的可視化解決方案,例如ECharts,AntV等等。我們可以把這些解決方案比作是一套套成熟的“工具”,那我們如何將這些“工具”應用于當前最熱門的兩個前端框架中呢?

 現在我們就以ECharts為例,來嘗試“工具”的各種用法。

Vue中運用ECharts
首先我們要把ECharts下載下來:

  1. npm install echarts --save 

全局引用
全局引用的好處就是我們一次性把ECharts引入項目后,就可以在任何一個組件中使用ECharts了。

首先在項目的main.js中引入ECharts,然后將其綁定在vue的原型上面:

  1. import echarts from 'echarts' 
  2.  
  3. Vue.prototype.$echarts = echarts 

接下來我們就可以在自己想用ECharts的組件中引用了:

  1. <template> 
  2.   <div> 
  3.     <div id="myChart"></div> 
  4.   </div> 
  5. </template> 
  6.  
  7. <script> 
  8. export default
  9.   name'chart'
  10.   data () { 
  11.     return { 
  12.       chart: null
  13.       options: {} 
  14.     } 
  15.   }, 
  16.   mounted () { 
  17.     this.initOptions() 
  18.     this.initCharts() 
  19.   }, 
  20.   methods: { 
  21.     initOptions () { 
  22.       this.options = { 
  23.         xAxis: { 
  24.           type: 'category'
  25.           data: ['Mon''Tue''Wed''Thu''Fri''Sat''Sun'
  26.         }, 
  27.         yAxis: { 
  28.           type: 'value' 
  29.         }, 
  30.         series: [{ 
  31.           data: [820, 932, 901, 934, 1290, 1330, 1320], 
  32.           type: 'line' 
  33.         }] 
  34.       } 
  35.     }, 
  36.     initCharts () { 
  37.       this.chart = this.$echarts.init(document.getElementById('myChart')) 
  38.       this.chart.setOption(this.options) 
  39.     } 
  40.   } 
  41. </script> 
  42.  
  43. <style scoped> 
  44.   #myChart{ 
  45.     width: 400px; 
  46.     height: 400px; 
  47.   } 
  48. </style> 

看看效果:

 

按需引用
全局引用是把Echarts完整的引入,這樣做的缺點就是會額外的引入很多其他沒有用的配置文件,可能會導致項目體積過大。如果因此資源加載的時間過長的話,也會影響人們的體驗,畢竟人們都喜歡快和更快。

針對上述問題,我們可以采用按需引入的方式。如果有很多頁面都需要用到

Echarts的話,那我們就在main.js中引入:

  1. let echarts = require('echarts/lib/echarts'
  2.  
  3. require('echarts/lib/chart/line'
  4.  
  5. require('echarts/lib/component/tooltip'
  6. require('echarts/lib/component/title'
  7.  
  8. Vue.prototype.$echarts = echarts 

如果只是在偶爾幾個頁面引用,也可以單獨在.vue引入:

  1. <script> 
  2. let echarts = require('echarts/lib/echarts'
  3.  
  4. require('echarts/lib/chart/line'
  5.  
  6. require('echarts/lib/component/tooltip'
  7. require('echarts/lib/component/title'
  8.  
  9. </script> 

然后再改一下Echarts的配置項:

  1. this.options = { 
  2.     title: { 
  3.       text: "測試表格" 
  4.     }, 
  5.     tooltip: { 
  6.       trigger'axis' 
  7.     }, 
  8.     xAxis: { 
  9.       type: 'category'
  10.       data: ['Mon''Tue''Wed''Thu''Fri''Sat''Sun'
  11.     }, 
  12.     yAxis: { 
  13.       type: 'value' 
  14.     }, 
  15.     series: [{ 
  16.       data: [820, 932, 901, 934, 1290, 1330, 1320], 
  17.       type: 'line' 
  18.     }] 

ref獲取DOM
我們可以發現,上面的例子都是用 getElementById() 來獲取渲染圖表的div,同樣我們也可以用 ref 來對真實的DOM進行操作。我們把代碼作以下修改:

  1. <template> 
  2.   <div> 
  3.     <div id="myChart" ref="myChart"></div> 
  4.   </div> 
  5. </template> 

  1. initCharts () { 
  2.   // this.chart = this.$echarts.init(document.getElementById('myChart')) 
  3.   this.chart = this.$echarts.init(this.$refs.myChart) 
  4.   this.chart.setOption(this.options) 

最終得到的效果是一樣的

React中運用ECharts
在React中運用ECharts的方式和Vue有很多相似之處,只是在寫法上有些許不同

全部引入
chart.jsx

  1. import React, { Component } from 'react'
  2. import echarts from 'echarts' 
  3. import './chart.less'
  4.  
  5. export class App extends Component { 
  6.     constructor(props) { 
  7.         super(props); 
  8.         this.state = { 
  9.             data:[820, 932, 901, 934, 1290, 1330, 1320] 
  10.         } 
  11.     } 
  12.  
  13.     componentDidMount(){ 
  14.         this.initCharts(); 
  15.     } 
  16.     //初始化 
  17.     initCharts = () => { 
  18.         let myChart = echarts.init(document.getElementById('myChart')); 
  19.         let option = { 
  20.             title: { 
  21.                 text: "測試表格-react" 
  22.               }, 
  23.               tooltip: { 
  24.                 trigger'axis' 
  25.               }, 
  26.               xAxis: { 
  27.                 type: 'category'
  28.                 data: ['Mon''Tue''Wed''Thu''Fri''Sat''Sun'
  29.               }, 
  30.               yAxis: { 
  31.                 type: 'value' 
  32.               }, 
  33.               series: [{ 
  34.                 data: this.state.data, 
  35.                 type: 'line' 
  36.               }] 
  37.         }; 
  38.         myChart.setOption(option); 
  39.         window.addEventListener("resize"function () { 
  40.             myChart.resize(); 
  41.         }); 
  42.     } 
  43.  
  44.     render(){ 
  45.         return ( 
  46.             <div className="chart"
  47.                 <div id="myChart"></div> 
  48.             </div> 
  49.         ) 
  50.     } 

chart.less

  1. .chart{ 
  2.     display: flex; 
  3.     flex: 1; 
  4.     #myChart{ 
  5.         width: 400px; 
  6.         height: 400px; 
  7.     } 

效果

按需引入
在React中,如果把ECharts整個引入,也會面臨項目包體積過大所造成的負面影響。當然也可以在React中按需引入ECharts,方法和Vue類似

  1. import echarts = 'echarts/lib/echarts' 
  2.  
  3. import 'echarts/lib/chart/line' 
  4.  
  5. import 'echarts/lib/component/tooltip' 
  6. import 'echarts/lib/component/title' 

在React-Hooks中使用
在以前沒有Hook的時候,我們都是在class里面寫代碼,就如上述的方法一樣。但是現在既然Hook這個好東西出來了,哪有不用的道理?

  1. import React, { useEffect, useRef } from 'react'
  2. import echarts from 'echarts'
  3.  
  4. function MyChart () { 
  5.     const chartRef = useRef() 
  6.     let myChart = null 
  7.     const options = { 
  8.         title: { 
  9.             text: "測試表格-react-hook" 
  10.         }, 
  11.         tooltip: { 
  12.             trigger'axis' 
  13.         }, 
  14.         xAxis: { 
  15.             type: 'category'
  16.             data: ['Mon''Tue''Wed''Thu''Fri''Sat''Sun'
  17.         }, 
  18.         yAxis: { 
  19.             type: 'value' 
  20.         }, 
  21.         series: [{ 
  22.             data: [820, 932, 901, 934, 1290, 1330, 1320], 
  23.             type: 'line' 
  24.         }] 
  25.     } 
  26.  
  27.     function renderChart() { 
  28.         const chart = echarts.getInstanceByDom(chartRef.current
  29.         if (chart) { 
  30.             myChart = chart 
  31.         } else { 
  32.             myChart = echarts.init(chartRef.current
  33.         } 
  34.         myChart.setOption(options) 
  35.     } 
  36.  
  37.     useEffect(() => { 
  38.         renderChart() 
  39.         return () => { 
  40.             myChart && myChart.dispose() 
  41.         } 
  42.     }) 
  43.  
  44.     return ( 
  45.         <> 
  46.             <div style={{width: "400px", height: "400px"}} ref={chartRef} /> 
  47.         </> 
  48.     ) 
  49.  
  50. export default MyChart 

看看效果

既然我們已經在Hook中成功引用了Echarts,那么為何不把代碼抽離出來,使之能讓我們進行復用呢?我們可以根據實際情況把一些數據作為參數進行傳遞:

useChart.js

  1. import React, { useEffect } from 'react'
  2. import echarts from 'echarts'
  3.  
  4. function useChart (chartRef, options) { 
  5.  
  6.     let myChart = null
  7.  
  8.     function renderChart() { 
  9.         const chart = echarts.getInstanceByDom(chartRef.current
  10.         if (chart) { 
  11.             myChart = chart 
  12.         } else { 
  13.             myChart = echarts.init(chartRef.current
  14.         } 
  15.         myChart.setOption(options) 
  16.     }; 
  17.  
  18.     useEffect(() => { 
  19.         renderChart() 
  20.     }, [options]) 
  21.  
  22.     useEffect(() => { 
  23.         return () => { 
  24.             myChart && myChart.dispose() 
  25.         } 
  26.     }, []) 
  27.  
  28.     return 
  29.  
  30. export default useChart 

接下來引用我們剛抽離好的Hook:

  1. import React, { useRef } from 'react' 
  2. import useChart from './useChart' 
  3.  
  4. function Chart () { 
  5.   const chartRef = useRef(null
  6.   const options = { 
  7.     title: { 
  8.         text: "測試表格 react-hook 抽離" 
  9.     }, 
  10.     tooltip: { 
  11.         trigger'axis' 
  12.     }, 
  13.     xAxis: { 
  14.         type: 'category'
  15.         data: ['Mon''Tue''Wed''Thu''Fri''Sat''Sun'
  16.     }, 
  17.     yAxis: { 
  18.         type: 'value' 
  19.     }, 
  20.     series: [{ 
  21.         data: [820, 932, 901, 934, 1290, 1330, 1320], 
  22.         type: 'line' 
  23.     }] 
  24.   } 
  25.   useChart (chartRef, options) 
  26.  
  27.   return ( 
  28.     <> 
  29.         <div style={{width: "400px", height: "400px"}} ref={chartRef} /> 
  30.     </> 
  31.   ) 
  32.  
  33. export default Chart 

最后
本文主要總結了ECharts作為數據可視化的高效工具在當今熱門的幾種前端框架中的基本用法。相信對于這方面接觸較少的小伙伴來說應該還是會有一定的幫助滴~

 

責任編輯:姜華 來源: 晨曦大前端
相關推薦

2015-04-17 16:44:22

swiftOC

2009-10-20 15:39:20

Linux壓縮

2009-07-03 13:22:37

調用Servlet

2023-06-08 09:00:00

2024-01-12 08:40:56

Python計算質數質數

2013-08-26 09:51:57

2020-06-18 10:26:43

JavaScript開發技術

2020-06-04 08:17:44

JavaScript延展操作運算符開發

2018-06-07 14:45:11

Windows驗證查看

2009-05-18 17:16:50

2010-07-09 10:32:56

路由器協議

2022-02-22 08:29:59

Vue前端防抖

2022-11-30 15:01:11

React技巧代碼

2022-06-10 08:01:17

ReduxReact

2017-07-14 10:10:08

Vue.jsMixin

2022-04-11 09:37:49

商業智能CIO

2010-08-16 16:39:48

DIV內容居中

2023-05-24 16:41:41

React前端

2022-05-24 14:37:49

React條件渲染

2018-10-08 08:00:00

前端ReactJavaScript
點贊
收藏

51CTO技術棧公眾號

国产精品嫩草影院在线看| 国产欧美综合在线观看第十页| 久久久精品欧美丰满| 成人网18免费软件大全| 亚州色图欧美色图| 好吊妞国产欧美日韩免费观看网站| 国产日韩三级在线| 一区视频在线| 欧美日韩精品在线视频| 国产精品一区二区电影| 日韩成人免费| 一区二区不卡在线播放 | 四虎在线观看| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产麻豆视频精品| 欧美一二区视频| 欧美日一区二区| 国产精品亚洲第一| 色yeye香蕉凹凸一区二区av| 国产精品免费久久久| 成人免费在线观看视频网站| 97色伦图片97综合影院| 美日韩免费视频| 大片网站久久| 欧美激情奇米色| 久久99精品久久久久久水蜜桃 | 久久久欧美精品sm网站 | 在线观看特色大片免费视频| 亚洲黄色av| 日本精品久久久久影院| 国产999精品在线观看| 亚洲黄色www| 一区二区三区伦理| 美女日韩在线中文字幕| 伊人永久在线| 国产盗摄在线视频网站| 户外露出一区二区三区| 麻豆高清免费国产一区| 国产精品美女久久久久久免费| 久久女同精品一区二区| 亚洲xxx自由成熟| 国产精品入口久久| 欧美日韩亚洲一区三区| 清纯唯美日韩制服另类| 国产片侵犯亲女视频播放| 日韩欧乱色一区二区三区在线| 精品va天堂亚洲国产| www555久久| 日韩精品在线观看网站| 成人国产精品一区二区免费麻豆 | 午夜欧美一区二区三区在线播放| 国产二级片在线| 亚洲人成网站影音先锋播放| 清纯唯美亚洲激情| 精品国产导航| 欧美另类在线播放| 日本粉色视频在线观看| 亚洲视频你懂的| 调教在线观看| 91福利国产成人精品照片| melody高清在线观看| 日韩一级片在线播放| 波多野结衣精品| 亚洲欧洲激情在线| 日韩在线成人| 精品二区三区线观看| 在线看黄的网站| 色婷婷久久99综合精品jk白丝| 婷婷在线视频| 日韩精品久久久久| 秋霞影院一区| 国产精品国产自产拍高清av水多 | 亚洲电影一区二区| 欧美日韩国产精品激情在线播放| 久久久久久久| 337p日本欧洲亚洲大胆精品| 成人免费图片免费观看| 亚洲午夜国产成人av电影男同| 超级碰碰久久| 97精品国产97久久久久久免费| 日本亚洲不卡| 亚洲色图综合网| 日韩精品导航| 欧美三级乱人伦电影| 国产精品一区二区三区视频网站| 亚洲欧美另类国产| 国产精品毛片视频| 激情伦成人综合小说| 成人黄色av电影| 在线看中文字幕| 亚洲欧美国产精品久久久久久久 | 日韩一级黄色av| 妖精视频一区二区三区免费观看| 99re热精品| 粉嫩欧美一区二区三区高清影视| 亚洲综合色在线观看| 欧美在线观看18| 福利视频亚洲| 国产精品久久久久免费| 国产69精品久久99不卡| 在线看黄的网站| 中文字幕日韩精品有码视频| 国产精品久久久久蜜臀 | 亚洲盗摄视频| 色999日韩自偷自拍美女| 久久嫩草精品久久久精品一| 国产九色在线| 自拍偷拍亚洲精品| 激情婷婷亚洲| 亚洲第一中文av| 欧美精品一区二区三区很污很色的 | 日韩一区二区免费高清| 国产精品7m视频| 一区二区在线免费播放| 黄色一级片网址| 亚洲人成在线播放| 电影k8一区二区三区久久| 91精品综合视频| 欧美精品亚洲| 亚洲欧美精品午睡沙发| 欧美又大又粗又长| 精精国产xxxx视频在线| 国内精品久久久| 国产videos久久| 欧美日韩在线中文| 伊人久久免费视频| 国产美女一区二区三区| 91在线视频播放| 国产免费久久| 日本高清中文字幕在线| 最近2019中文字幕一页二页| 蝌蚪视频在线播放| 欧美最近摘花xxxx摘花| 久久人人97超碰com| 日韩欧美精品电影| 公共露出暴露狂另类av| 日韩欧美区一区二| 99xxxx成人网| 视频国产一区二区三区| 成人在线观看网址| 久久久久久久91| 国产不卡一区二区在线观看| 中文字幕一区二区视频| 欧美在线观看成人| 国产超碰在线播放| 国产精品推荐精品| 欧美日韩岛国| 99热在线免费观看| av资源在线播放| 国产视频精选在线| 国产精品亚洲一区| 久久久精品天堂| 欧美9999| www浪潮av99com| 国产精品av网站| 日本精品一区二区三区四区的功能| 国产精品99一区二区| 精品一区二区三区视频日产| 精品国产乱码久久久久久久软件| 欧美最新大片在线看| 天堂在线一二区| 国产精品乱码视频| 日韩一级在线观看| 国产乱子伦一区二区三区国色天香 | 国产精品乱码| 国产免费一区二区三区在线观看 | 色999韩欧美国产综合俺来也| 91在线观看免费观看| 亚洲国产精品t66y| 成人福利一区二区| 男人亚洲天堂网| 97精品国产aⅴ7777| 亚洲婷婷综合久久一本伊一区| 国产精品白丝一区二区三区| 天天色综合6| 中文字幕日韩精品一区| 欧美第一在线视频| 国产成人精品视频ⅴa片软件竹菊| 日韩在线免费高清视频| 99re热这里只有精品免费视频| 国产亚洲精品精品国产亚洲综合| www.成年人视频| 欧美丰满老妇厨房牲生活| 国产精品三级av在线播放| 欧美亚洲色图校园春色| 蜜芽tv福利在线视频| 欧美日韩亚洲免费| 亚洲精品在线91| 亚洲欧美日韩系列| 天天色综合色| 制服丝袜在线播放| 91视频免费版污| 精品在线视频一区二区| 大量国产精品视频| 欧美丝袜自拍制服另类| 99视频精品在线| 亚洲一级黄色| 国产激情一区| 黄av在线播放| 成人禁在线观看网站|