webpack+react實現echarts可視化配置

来源:https://www.cnblogs.com/shenyuchong/archive/2019/01/19/10291532.html
-Advertisement-
Play Games

先上效果 開發環境要求 需要事先安裝node及npm 前期準備 1.創建文件夾react-echarts-editor2.在項目根目錄(以下稱根目錄)下創建src目錄3.在項目根目錄下創建dist目錄4.在src目錄下創建app.js文件(該文件就來一個react-echarts版的hello wo ...


先上效果

開發環境要求

需要事先安裝node及npm

前期準備

1.創建文件夾react-echarts-editor
2.在項目根目錄(以下稱根目錄)下創建src目錄
3.在項目根目錄下創建dist目錄
4.在src目錄下創建app.js文件(該文件就來一個react-echarts版的hello world)

import React from 'react';
import ReactDOM from 'react-dom';
import ReactEcharts from "echarts-for-react";

class EchartsEditor extends React.Component{
    constructor(props) {
        super(props);
        this.state = {
            echartsOption:  {
                xAxis: {
                    type: 'category',
                    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
                },
                yAxis: {
                    type: 'value'
                },
                series: [{
                    data: [820, 932, 901, 934, 1290, 1330, 1320],
                    type: 'line'
                }]
            }
        };
    }
    render(){
        return(
            <div>
                <ReactEcharts option={this.state.echartsOption} />
            </div>
    );
    }
}
ReactDOM.render(<EchartsEditor/>,document.getElementById("container"));

5.在dist目錄下創建index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="container"></div>
</body>
<script src="bundle.js"></script>
</html>

6.在根目錄下創建使用命令創建package.json

npm init -y

7.在根目錄下創建使用命令安裝webpack、babel、react、echarts 、lodash

npm install webpack webpack-cli --save-dev
npm install babel-preset-flow babel-preset-env babel-preset-stage-1 --save-dev 
npm install react react-dom echarts echarts-for-react lodash --save

安裝完後package.json如下:

{
  "name": "react-echarts-editor",
  "version": "0.0.1",
  "dependencies": {
    "echarts": "^4.2.0-rc.2",
    "echarts-for-react": "^2.0.15-beta.0",
    "lodash": "^4.17.11",
    "react": "^16.7.0",
    "react-dom": "^16.7.0"
  },
  "devDependencies": {
    "babel-preset-env": "^1.7.0",
    "babel-preset-flow": "^6.23.0",
    "babel-preset-stage-1": "^6.24.1",
    "webpack": "^4.28.4",
    "webpack-cli": "^3.2.1"
  }
}

8.在根目錄下創建webpack.config.js

const path = require('path');
module.exports = {
    entry: './src/app.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    'module': {
        'rules': [
            {
                'test': /\.(js|jsx)?$/,
                'exclude': /node_modules/,
                use: [{
                    loader: "babel-loader",
                    options: {presets:["env","flow","react","es2015","stage-1"]}
                }]
            }
        ]
    }
}

 9.項目結構最後如下:

測試項目

在根目錄下執行:

npx webpack

用瀏覽器打開dist目錄下的index.html如下則成功:

以上簡單的react+webpack架構就完成了。

編寫一些工具函數

createOrSet函數接收echarts的option,propChain為屬性鏈,value為要設置的值(不懂的可以先用)

createOrSet=(echartsOption,propChain,value)=>
    {
        if(_.isString(value)||_.isBoolean(value)||_.isNumber(value)||_.isArray(value)) {
            _.set(echartsOption, propChain, value);
        }else if(_.isObject(value)){
            if(_.get(echartsOption,propChain)===undefined){
                _.set(echartsOption, propChain, value);
            }else{
                let objBefore = _.get(echartsOption,propChain);
                let objAfter = {...objBefore,...value};
                _.set(echartsOption, propChain, objAfter);
            }
        }
        return echartsOption;
    }
    createOrSetProp=(propChain,value)=>
    {
        let echartsOption = _.cloneDeep(this.state.echartsOption);
        echartsOption=this.createOrSet(echartsOption,propChain,value);
        this.setState({echartsOption: echartsOption});
    }

編寫屬性配置界面

<div style={{width:'50%',float:'left'}}>
    <input type="text"  style={{'width': '100%',float:'left'}} placeholder="輸入圖表標題" value={_.get(this.state.echartsOption,'title.text','')} onChange={e=>this.createOrSetProp('title.text',e.target.value)} />
    <input type="range" style={{'width': '100%',float:'left'}} defaultValue='60'    min="1" max="100" onChange={(e)=>{this.createOrSetProp('grid.top',e.target.value)}}/>
    <input type="range" style={{'width': '100%',float:'left'}} defaultValue='60'    min="1" max="100" onChange={(e)=>{this.createOrSetProp('grid.bottom',e.target.value)}}/>
    <input type="range" style={{'width': '100%',float:'left'}} defaultValue='10'   min="1" max="100" onChange={(e)=>{this.createOrSetProp('grid.left',e.target.value+'%')}}/>
    <input type="range" style={{'width': '100%',float:'left'}} defaultValue='10'  min="1" max="100" onChange={(e)=>{this.createOrSetProp('grid.right',e.target.value+'%')}}/>
</div>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 工具和準備: MYSQL 8.0jar包: 鏈接:https://pan.baidu.com/s/1O3xuB0o1DxmprLPLEQpZxQ 提取碼:grni 使用eclipse開發首先把jar包導入內庫中 首先將jar包複製到項目src下,右擊src點擊build path然後會在Refren ...
  • [toc] 首發日期:2019 01 20 上篇內容回顧: 上篇內容講了 Vue的介紹:優點,MVVM Vue的靜態導入與安裝,以及hello world 實例可定義的內容:el,data,methods,生命周期鉤子(包括計算屬性,偵聽器也是可以定義在實例中的) 計算屬性 偵聽器 數據綁定 v m ...
  • 前言 此內容是個人學習筆記,以便日後翻閱。 非教程,如有錯誤還請指出 webpack 暴露全局變數 通過 expose loader 內聯配置 在 webpack中配置 每個模塊通過註入的方式 通過CDN的方式引入一個庫,並通過 webpack在項目中優化 通過 expose loader 內聯配置 ...
  • 一、概述 FormData類型是XMLHttpRequest 2級定義的,它是為序列化表以及創建與表單格式相同的數據提供便利。 作用:1.利用一些鍵值對來模擬一系列表單控制項:即將form中的所有表單元素的name和value組裝成一個queryString;2.非同步上傳二進位文件。 與普通Ajax相 ...
  • [toc] 首發日期:2019 01 19 前言: 有時候,一個後端開發者“不得不”自己去搭建前端界面。如果有的選,當然選一個比較好學的前端“框架”咯(框架很多時候封裝了普通的html元素,使得能更加方便地使用)。 如果你做的項目的界面是一個偏後臺管理的而且要求並不高的界面的時候,你可以考慮easy ...
  • 元素事件:滑鼠按下事件/滑鼠移動事件/滑鼠鬆開事件 元素樣式:讓元素脫離文檔流,採用絕對定位的方式。 一、滑鼠按下事件 當滑鼠在元素上面按下時,保存元素的初始偏移量和滑鼠按下時的坐標,然後在狀態變數裡面標記當前狀態為按下狀態。 二、滑鼠移動事件 當滑鼠拖動元素移動時,我們通過計算滑鼠從起始位到移動位 ...
  • 不知不覺我的第一個小程式已經上線一周了,uv也穩定的上升著。 很多人說我的小程式沒啥用,我默默一笑,心裡說:“它一直敦促我學習,敦促我進步”。我的以一個小程式初衷是經驗分享,目前先把經驗分享到博客園,邊學習邊完善小程式。同時我會持續學習,持續更新,功能定會一天天的完善起來。 歡迎大家掃碼體驗。 閑話 ...
  • 在結構上多一個指向自身的constructor構造函數,這就是原型鏈夠簡單吧. 利用原型鏈結構實現繼承和向鏈表中插入節點,有區別嗎? 沒區別!! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...