前言
一種在 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 存在以下一些問題:
由于用WebView 封裝 Echarts 涉及到本地 html,不是純 JavaScript 語言層面的功能,又沒有 native 代碼,所以做成 nmp package 并不是一個很好的選擇,寫成項目里的內部組件,自己進行配置反而是更方便更靈活的方案。
因此我們決定不使用第三方的 Echarts 封裝庫,自己寫一個通用組件 WebChart 。為方便開發中使用,該組件具有以下特點:
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 ,也可設為定值。額外的三個參數:
當然這是根據我們的業務需要設計的參數,你完全可以自由重新設定。
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。
在使用中,還有以下幾個坑未解決,目前只能繞過,歡迎知道的同學指正:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答