亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入了解響應式React Native Echarts組件

2019-11-19 11:26:15
字體:
來源:轉載
供稿:網友

前言

一種在 React Native 中封裝的響應式 Echarts 組件,使用與示例請參見:react-native-echarts-demo

近年來,隨著移動端對數據可視化的要求越來越高,類似 MPAndroidChart 這樣的傳統圖表庫已經不能滿足產品經理日益變態的需求。前端領域數據可視化的發展相對繁榮一些,通過 WebView 在移動端使用 Echarts 這樣功能強大的前端數據可視化庫,是解決問題的好辦法。

React Native 開發中,由于使用的是與前端相同的 JavaScript 語言,銜接 Echarts 的工作相對順暢些,不過一些必要的組件封裝還是能夠大大提高開發效率的。

Echarts 官方推薦過一個第三方封裝庫:react-native-echarts(注:它對應的 nmp package 名字為native-echarts ),目前有 400+ stars 和 100+ 的周下載量,可見還是被廣泛使用的。但是我們經過調研,發現 react-native-echarts 存在以下一些問題:

  • 該庫已半年多未更新,Echarts 版本停留在 3.0 ,Android 端打包需手動添加 assets 的問題也一直未處理
  • 庫的接口靈活度較低,比如只能通過 width、height 設置大??;無法使用 Echarts 擴展包;無法進行事件注冊、WebView 通信等

由于用WebView 封裝 Echarts 涉及到本地 html,不是純 JavaScript 語言層面的功能,又沒有 native 代碼,所以做成 nmp package 并不是一個很好的選擇,寫成項目里的內部組件,自己進行配置反而是更方便更靈活的方案。

因此我們決定不使用第三方的 Echarts 封裝庫,自己寫一個通用組件 WebChart 。為方便開發中使用,該組件具有以下特點:

  • 按照響應式進行設計,只需在 option 中配置好數據源,數據變化后圖表就會自動刷新,更符合 React 的風格。
  • 我們的方案是在組件每次 update 時判斷傳入的 option 參數是否發生變化,如果變化通過 webView.postMessage ,以 JSON 的形式傳入新的 option ,通知 Echarts 重新 setOption 。
  • 雖然 Echarts 本身會對 option 進行對比,但事先判斷可以減少 update 導致的與 WebView 頻繁通信,這一點在容器父組件中有大量異步請求時還是很明顯的;在 WebView 內部,更新則是采用 Echarts 本身的 setOption 而無需 reload 整個 WebView
  • 利用 WebView 的 postMessage 和 onMessage 接口,可實現圖表與其它 React Native 組件的事件通信
  • 通過組件的 exScript 參數,可為 WebView 添加任意腳本,使用靈活
  • 由于是自己寫的組件, echarts 版本、擴展包,svg/canvas 、數據增量加載都可以自己設定

Demo 與使用方法

使用與示例請參見:react-native-echarts-demo,如果你需要直接使用,可按以下步驟移植:

將根目錄下的 WebChart 組件文件夾拷到你項目中合適的地方
將 /android/app/src/main/assets/web 文件夾拷到你項目同樣位置,沒有 assets 文件夾需手動創建。
只需以上兩步就可以在項目中使用 WebChart 組件了。

如果需要進一步定制的話,Echarts 代碼在以上兩個文件夾中的 index.html 里 <script /> 標簽內,目前是放的是 4.0 完整版,無擴展包,可到官網下載所需的版本和擴展包替換;svg/canvas 、數據增量加載等可在 WebChart/index.js 中直接進行修改。在移動端,出于性能的考慮,我們一般使用 svg 的渲染模式。

WebChart 具體使用可參見 App.js ,style 的設置就和普通的 React Native 組件一樣,可使用 flex ,也可設為定值。額外的三個參數:

  • option(object):賦給 setOption 的參數對象,發生變化后 WebChart 內部會自動調用 setOption ,實現響應式刷新。特別注意,JSON 解析時未進行函數的處理,所以需避免使用函數式的 formatter 和類形式的 LinearGradient ,和 demo 一樣使用模板式和普通對象的吧
  • exScript(string):任何你想在 WebView 加載時執行的代碼,一般會是事件注冊之類的,推薦使用模板字面量
  • onMessage(function):WebView 內部觸發 postMessage 之后的回調,postMessage 需先在 exScript 中進行設置,用于圖表與其它 React Native 組件的通信

當然這是根據我們的業務需要設計的參數,你完全可以自由重新設定。

Echarts與React Native組件的通信

在 React Native 的 WebView 組件中,提供了 onMessage 和 postMessage 來進行 html 與組件的雙向通信,具體使用可參加文檔。

利用 webView.postMessage ,WebChart 實現了通知 Echarts 執行 setOption ;在 exScript 中,可利用 window.postMessage 實現 Echarts 的事件向 React Native 組件的通信。

一般我們會約定通信的 data 為這樣格式的對象:

{type: 'someType',payload: {value: 111,},}

由于 onMessage 和 postMessage 只能進行字符串的傳遞,在 exScript 需進行 JSON 序列化,類似這樣:

exScript={`chart.on('click', (params) => {if(params.componentType === 'series') {window.postMessage(JSON.stringify({type: 'select',payload: {index: params.dataIndex,},}));}});`}

以上就是我們封裝的響應式 WebChart 組件及使用,完整代碼請參見:react-native-echarts-demo。

在使用中,還有以下幾個坑未解決,目前只能繞過,歡迎知道的同學指正:

  • 在 IOS 中,Echarts 好像渲染不出透明的效果,用 rgba 設置的顏色不能正常
  • React Native 的 WebView 好像 style.height 屬性無效,因此不得不在外面套了個 View
  • 按現在的資源加載方式,index.html 在 Android 上會有兩份。因為平臺判斷是運行時進行的,哪怕分開設置 index.anroid.js 和 index.ios.js 打包時也會都打包進去,而 Android 中又必須手動添加 assets
  • index.html 中必須內聯引入 Echarts 的代碼,外部引用單獨的 js 文件好像無效

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产97人人超碰caoprom| 黑人狂躁日本妞一区二区三区| 亚洲国产精品va在线看黑人动漫| 精品久久中文字幕| 国产精品男人爽免费视频1| 欧美性视频网站| 亚洲精品国产综合区久久久久久久| 91成人性视频| 日本久久久久久久久久久| 国产国语刺激对白av不卡| 免费不卡欧美自拍视频| 最近更新的2019中文字幕| 91国产精品电影| 在线精品国产成人综合| 久久久精品电影| 亚洲第一网站免费视频| 国产热re99久久6国产精品| 久久免费高清视频| 日韩中文字幕在线视频播放| 欧美日韩aaaa| 欧美激情欧美激情在线五月| 91日本在线观看| 国产精品精品国产| 久久av中文字幕| 欧洲成人免费视频| 日韩在线观看网址| 欧美激情2020午夜免费观看| 91精品国产91久久久久福利| 久久久影视精品| 欧美精品日韩三级| 国产精品视频一区国模私拍| 97色在线观看| 国产精品69久久久久| 色播久久人人爽人人爽人人片视av| 国产精品国产亚洲伊人久久| 日韩亚洲欧美中文高清在线| 国产精品人成电影在线观看| 国产一区二区三区丝袜| 日韩福利在线播放| 午夜精品久久久99热福利| 国产精品流白浆视频| 亚洲天堂影视av| 亚洲国产精彩中文乱码av| 久久成人这里只有精品| 91精品视频播放| 97精品伊人久久久大香线蕉| 国产一区视频在线播放| 中文字幕欧美在线| 日韩欧美在线国产| 精品二区三区线观看| 亚洲欧美国产制服动漫| 91中文精品字幕在线视频| 668精品在线视频| 成人免费在线网址| 欧美精品videosex牲欧美| 欧美午夜精品久久久久久浪潮| 91在线视频精品| 国产精品麻豆va在线播放| 精品国产1区2区| 综合久久五月天| 亚洲在线一区二区| 国产精品成人在线| 日韩欧美在线中文字幕| 成人精品aaaa网站| 亚洲第一免费网站| 国产精品极品美女在线观看免费| 国产精品扒开腿做爽爽爽视频| 国产精品高精视频免费| 欧美激情久久久久| 亚洲国产福利在线| 国产不卡av在线| 欧美成人免费全部| 在线不卡国产精品| 日韩中文字幕视频在线观看| 亚洲欧美日韩中文在线制服| 97超碰色婷婷| 日本中文字幕不卡免费| 色妞色视频一区二区三区四区| 国产精品久久久久久婷婷天堂| 精品亚洲国产成av人片传媒| 性色av一区二区三区| 欧美日韩国产中文字幕| 亚洲精品99999| 亚洲专区中文字幕| 国产成人一区二区三区小说| 欧美肥老妇视频| 亚洲精品www久久久久久广东| 成人444kkkk在线观看| 亚洲成人网久久久| 精品国产一区二区三区四区在线观看| 日韩在线精品视频| 久久大大胆人体| 中文字幕精品av| 国产精品aaa| 国产婷婷成人久久av免费高清| 国产日韩av高清| 久久久久久一区二区三区| 亚洲视频专区在线| 国产精品91免费在线| 日韩av在线高清| 国产精品久久久久久久av电影| 欧美日韩一区二区在线播放| 国产精品美女主播| 日韩电影大全免费观看2023年上| 日韩欧美视频一区二区三区| 久久亚洲综合国产精品99麻豆精品福利| 亚洲综合最新在线| 久久久亚洲欧洲日产国码aⅴ| 日韩国产欧美精品在线| 在线观看国产精品日韩av| 国产精品扒开腿做爽爽爽男男| 亚洲aⅴ日韩av电影在线观看| 国产精品欧美日韩一区二区| 国产成人jvid在线播放| 亚洲品质视频自拍网| 精品丝袜一区二区三区| 久久精品成人欧美大片古装| 日韩欧美极品在线观看| 国产日韩精品在线| 青草热久免费精品视频| 中日韩美女免费视频网站在线观看| 在线看日韩av| 亚洲精品美女在线观看| 久久精品小视频| 国产精品88a∨| 亚洲成人精品av| 日韩精品免费视频| 欧美成人免费播放| 欧美日韩国产在线| 亚洲成色999久久网站| 日韩美女视频在线观看| 国产美女高潮久久白浆| 日韩va亚洲va欧洲va国产| 亚洲成色www8888| 亚洲天堂开心观看| 国产欧美一区二区三区久久| 亚洲一区二区三区四区视频| 亚洲一区二区三| 中国china体内裑精亚洲片| 久久久91精品国产| 热99精品只有里视频精品| 国产专区精品视频| 国产精品久久久久久av福利软件| 午夜精品久久久久久99热| 亚洲自拍偷拍网址| 日韩一区二区三区xxxx| 久久久久久久久久久人体| 日韩欧美在线视频| 国产精品亚洲美女av网站| 欧美韩国理论所午夜片917电影| 一本色道久久88精品综合| 热草久综合在线| 久久亚洲精品一区二区| 亚洲国产小视频在线观看| 欧美日韩国产区| 日韩大陆欧美高清视频区| 欧美激情中文字幕在线| 97在线视频免费观看| 国内精品一区二区三区四区| 日韩免费观看视频| 日韩色av导航| 色偷偷av亚洲男人的天堂| 久久久久久这里只有精品| 日韩精品在线视频观看|