react-echarts之折線圖的顯示

来源:http://www.cnblogs.com/qinbb/archive/2016/12/27/6150509.html
-Advertisement-
Play Games

react中想要實現折線圖和餅圖的功能,需要引入react-echarts包,然後再實現折線圖的功能。我這裡引用的版本是:0.1.1。其他的寫法參echarts官網即可。下麵詳細講解的是我在react+redux+router+webpack+antd腳手架上面完成的折線圖和餅圖。 這篇文章主要講解 ...


        react中想要實現折線圖和餅圖的功能,需要引入react-echarts包,然後再實現折線圖的功能。我這裡引用的版本是:0.1.1。其他的寫法參echarts官網即可。下麵詳細講解的是我在react+redux+router+webpack+antd腳手架上面完成的折線圖和餅圖。  

  這篇文章主要講解的是折線圖,折線圖主要分為普通的折線圖和大面積折線圖,普通的折線圖又分為三種獲取單個折線圖、兩個折線圖、多個每行兩個折線圖。

  • 大面積折線圖,echarts3官網大面積折線圖官網實例如圖,網址:http://echarts.baidu.com/demo.html#area-simple

 

將代碼粘貼複製到自己的腳手架相對應的組件中即可,以下是我的一些功能實現,詳細的講解就在代碼註釋上面

 

import React, {PropTypes, Component} from 'react';//引入react包,用於編寫react組件
import { Router, Route, browserHistory} from 'react-router';//引入react-router包,用於路由跳轉
import {Row,Col} from 'antd';//引入螞蟻金服的antUI組件中的row和col(柵格),管理佈局
import ECharts from 'react-echarts';//引入react-echarts包,實現echarts實現
import '../../../common/sass/activity/activity.scss';//引入自己的scss文件
import '../../../common/sass/public/customButton.scss';


//設置全局變數
var optionDatas={},
    converRate=null,
    dateArray=[],
    rateArray=[];
class ReactEcharts extends React.Component {    
    constructor(props) {
        super(props);
        //初始化修改狀態屬性
        this.state = {
            visible: false,
            activityName:''
        }
    }
    /*生命周期函數--->該方法在完成首次渲染之前被調用-》調用action中ajax方法,獲取數據*/
    componentWillMount() {
        this.props.atyactions.queryAtyView();
    }

    /**
     *條件:當組件確定要更新,在 render 之前調用
     *用處:這個時候可以確定一定會更新組件,可以執行更新前的操作
     *註意:方法中不能使用 setState ,setState 的操作應該在 componentWillReceiveProps 方法中調用
     * @param nextProps
     * @param nextState
     */
    componentWillUpdate(nextProps, nextState) {
        if(nextProps.atyViewDatas.queryAtyInfoById.status==="yes"){
            dateArray.length=0;
            rateArray.length=0;
            const array=nextProps.atyViewDatas.queryAtyInfoById.returnDatas;
            const converRateArray=array[0].converRateArray;
            converRateArray.map((item, index) =>{  
                 dateArray.push(item.activityDate);
                 rateArray.push(item.converRate);
                 converRate=array[0].converRate;
            } );           
        }else{
            converRate=null,
            dateArray=[],
            rateArray=[];
        }
        //echarts中獲取數據的option設置
        optionDatas ={
            tooltip : {
                trigger: 'axis',
                position: function (pt) {
                    return [pt[0], '10%'];
                }
            },
            title: {
                text: '整體轉化率:'+ converRate*100+"%" +"                                                                                                     " 
                     + '更多詳情請點擊>>',
                //backgroundColor:'#278BDD',
                //borderColor: '#ccc',
                //borderWidth: 0,
                padding: 10,       
                link:'/activityManage' ,
                textStyle: {
                    fontFamily: '微軟雅黑',
                    fontSize: 14,
                    fontStyle: 'normal',
                    fontWeight: 'normal',
                }
            },
            toolbox: {
                feature: {
                    dataZoom: {
                        yAxisIndex: 'none'
                    },
                    restore: {}
                }
            },
            //佈局設置,類似於margin
            grid: {
                left: '3%',
                right: '2%',
                bottom: '10%',
                containLabel: true
            },
            //X軸數據設置dateArray
            xAxis : [
                {
                    type : 'category',
                    boundaryGap : false,
                    data : dateArray
                }
            ],
            yAxis : [
                {
                    type : 'value'
                }
            ],
            //大面積折線圖最下麵的伸拉條設置,展示30天數據
            dataZoom: [{
                type: 'inside',
                start: 0,
                end: 30
            }, {
                start: 0,
                end: 30,
                //handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
                handleSize: '80%',
                handleStyle: {
                    color: '#fff',
                    shadowBlur: 3,
                    shadowColor: 'rgba(0, 0, 0, 0.6)',
                    shadowOffsetX: 2,
                    shadowOffsetY: 2
                }
            }],
            //折線圖圖標和線條設置以及Y軸數據設置rateArray
            series : [
                {
                    name:'轉化率',
                    type:'line',
                    stack: '總量',
                    symbol:'star',//節點性狀
                    itemStyle:{
                        normal:{
                            color: "#278BDD" //圖標顏色
                        }
                    },
                    lineStyle:{
                        normal:{
                            width:3,  //連線粗細
                            color: "#278BDD"  //連線顏色
                        }
                    },
                    data:rateArray
                }
            ]
        };
    }
    render(){
        return(
            <div className="atyViewBg">
                <Row style={{marginRight:-20}}>
                        <Col span={24} className="ehcharts">
                            <ECharts option={optionDatas} />
                        </Col>
                </Row>
            </div>
        );
    }

}

//定義組件預設的屬性值(如果父組見沒有傳遞數據,使用預設數據)
ReactEcharts.defaultProps = {};
//校驗從父組件傳遞的屬性值是否符合
ReactEcharts.propTypes = {};
//將ReactEcharts組建開放,其他組件只要在文件開始引入改組件即可引用
export default ReactEcharts;
大面積折線圖

 效果圖如下:

 

  • 普通折線圖,echarts3官網普通折線圖官網實例如圖,網址:http://echarts.baidu.com/demo.html#area-stack

在這裡我講解兩種折線圖動態獲取,一個是每次獲取兩個折線圖(除了數據不一樣,其他一樣),另一個是獲取多個兩個折線圖。主要用到的方法是ES6中的map迴圈,想瞭解該語法,請訪問如下網址:http://es6.ruanyifeng.com/#docs/set-map

  1. 每次獲取兩個折線圖(除了數據不一樣,其他一樣),詳細講解在代碼中,和上面重覆的部分就不再詳細講解。

 

  1 import React, {PropTypes, Component} from 'react';
  2 import ECharts from 'react-echarts';
  3 import {Row, Col} from 'antd';
  4 import '../../../../common/sass/evaluate/evaluate.scss';
  5 
  6 export default class OverallConverRate extends React.Component {
  7     //
  8     constructor(props) {
  9         super(props);
 10         let d = new Date();
 11         this.state = {
 12             echartsFlag: false,
 13             queryParam: {
 14                 'activityId': this.props.evaluateData.activity.activityId,//活動ID
 15                 'statisDate': d.getFullYear() + "" + (d.getMonth() + 1) + "" + d.getDate(),//查詢日期預設當天
 16                 'userType': 1,//用戶類型:1是全部用戶,2是註冊用戶
 17             }
 18         }
 19     }
 20     componentWillMount() {
 21         //調用action中的ajax方法,獲取數據
 22         this.props.actions.overAllConverRateData(this.state.queryParam);
 23     }
 24 
 25     componentWillReceiveProps(nextProps) {
 26         if (nextProps.evaluateData.allConverRateData.dateArr.length > 0) {
 27             this.setState({echartsFlag: true});
 28         }
 29     }
 30     //echart方法
 31     echarts() {
 32         const optionUsers = {
 33             tooltip: {
 34                 trigger: 'axis'
 35             },
 36             grid: {
 37                 left: '5%',
 38                 right: '5%',
 39                 top:'10px',
 40                 bottom: '5%',
 41                 containLabel: true
 42             },
 43             xAxis: [
 44                 {
 45                     type : 'category',
 46                     boundaryGap : false,
 47                     axisTick:{
 48                         show:false,//是否顯示坐標軸刻度
 49                     },
 50                     /*設置X軸字體樣式*/
 51                     axisLabel: {
 52                         show: true,
 53                         interval: 0,
 54                         rotate: 20,//傾斜30度
 55                         textStyle: {
 56                             color: '#666',
 57                             fontSize: 12,
 58                             fontFamily: '微軟雅黑'
 59                         }
 60                     },
 61                     axisLine: {
 62                         lineStyle:{
 63                             color:'#999'
 64                         }
 65                     },
 66                     data: this.props.evaluateData.allConverRateData.dateArr
 67                 }
 68             ],
 69            yAxis: [
 70                   {
 71                     type : 'value',
 72                     axisTick:{
 73                         show:false,//是否顯示坐標軸刻度
 74                     },
 75                     //splitNumber:10,//增加Y軸刻度變多
 76                     /*設置y軸字體樣式*/
 77                     axisLabel: {
 78                         show: true,
 79                         formatter: '{value}%',
 80                         textStyle: {
 81                             color: '#666',
 82                             fontSize: 12,
 83                             fontFamily: '微軟雅黑'
 84                         }
 85                     },
 86                     axisLine: {
 87                         lineStyle:{
 88                             color:'#999'
 89                         }
 90                     }
 91                 }
 92             ],
 93             series: [
 94                 {
 95                     name: '推薦人次轉化率',
 96                     type: 'line',
 97                     stack: '總量',
 98                     symbol: 'star',//節點性狀
 99                     itemStyle: {
100                         normal: {
101                             color: "#278BDD" //圖標顏色
102                         }
103                     },
104                     lineStyle: {
105                         normal: {
106                             width: 2,  //連線粗細
107                             color: "#278BDD"  //連線顏色
108                         }
109                     },
110                     smooth: true,//折線圖是趨緩的
111                     data: this.props.evaluateData.allConverRateData.userRateArr
112                 }
113             ]
114         };
115         const optionItems = {
116             tooltip: {
117                 trigger: 'axis'
118             },
119             grid: {
120                 left: '5%',
121                 right: '0',
122                 top:'10px',
123                 bottom: '5%',
124                 containLabel: true
125             },
126             xAxis: [
127                 {
128                     type : 'category',
129                     boundaryGap : false,
130                     axisTick:{
131                         show:false,//是否顯示坐標軸刻度
132                     },
133                     /*設置X軸字體樣式*/
134                     axisLabel: {
135                         show: true,
136                         interval: 0,
137                         rotate: 20,//傾斜30度
138                         textStyle: {
139                             color: '#666',
140                             fontSize: 12,
141                             fontFamily: '微軟雅黑'
142                         }
143                     },
144                     axisLine: {
145                         lineStyle:{
146                             color:'#999'
147                         }
148                     },
149                     data: this.props.evaluateData.allConverRateData.dateArr
150                 }
151             ],
152             yAxis: [
153                {
154                     type : 'value',
155                     axisTick:{
156                         show:false,//是否顯示坐標軸刻度
157                     },
158                     //splitNumber:10,//增加Y軸刻度變多
159                     /*設置y軸字體樣式*/
160                     axisLabel: {
161                         show: true,
162                         formatter: '{value}%',
163                         textStyle: {
164                             color: '#666',
165                             fontSize: 12,
166                             fontFamily: '微軟雅黑'
167                         }
168                     },
169                     axisLine: {
170                         lineStyle:{
171                             color:'#999'
172                         }
173                     }
174                 }
175             ],
176             series: [
177                 {
178                     name: '推薦內容轉化率',
179                     type: 'line',
180                     stack: '總量',
181                     symbol: 'star',//節點性狀
182                     itemStyle: {
183                         normal: {
184                             color: "#278BDD" //圖標顏色
185                         }
186                     },
187                     lineStyle: {
188                         normal: {
189                             width: 2,  //連線粗細
190                             color: "#278BDD"  //連線顏色
191                         }
192                     },
193                     smooth: true,//折線圖是趨緩的
194                     data: this.props.evaluateData.allConverRateData.itemRateArr
195                 }
196             ]
197         };
198         //推薦人次轉化率和推薦內容轉化率數組中的最後一個數據,在echart標題上()顯示
199         const userRateLast = (this.props.evaluateData.allConverRateData.userRateArr[this.props.evaluateData.allConverRateData.userRateArr.length-1]) ? (this.props.evaluateData.allConverRateData.userRateArr[this.props.evaluateData.allConverRateData.userRateArr.length-1]) +'%': '沒有數據';
200         const itemRateLast = (this.props.evaluateData.allConverRateData.itemRateArr[this.props.evaluateData.allConverRateData.itemRateArr.length-1]) ? (this.props.evaluateData.allConverRateData.itemRateArr[this.props.evaluateData.allConverRateData.itemRateArr.length-1]) +'%': '沒有數據';
201         if (this.state.echartsFlag) {
202             return <div className="common-echart-body-div">
203                 <Col span={11} className="commont-small-ehcharts">
204                     <Col span={14} offset={1}><h2 className="common-echart-title">推薦人次轉化率({userRateLast})</h2></Col>
205                     <ECharts option={optionUsers} />
206                 </Col>
207                 <Col span={2} ><div className="common-echart-border"></div></Col>
208               <Col span={11} className="commont-small-ehcharts">
209               <Col span={14} offset={1}><h2 className="common-echart-title">推薦內容轉化率({itemRateLast})</h2></Col>
210                     <ECharts option={optionItems} />
211               </Col>
212             </div>;
213         } else {
214             return '沒有折線圖';
215         }
216     }
217 
218     render() {
219         return (
220             <div className="sceneEvaluateRate">
221                 {this.echarts()}{/*調用echarts()方法*/}
222             </div>
223         );
224     }
225 }

 

效果圖如下:

 

 

  2.獲取多個兩個折線圖,代碼如下:

  

  1 import React, {PropTypes, Component} from 'react';
  2 import ECharts from 'react-echarts';
  3 import {Row,Col,Modal} from 'antd';
  4 import SceneConverRateModal from './SceneConverRateModal';
  5 import '../../../../common/sass/public/echarts.scss';
  6 
  7 export default class SceneConverRate extends React.Component {
  8     constructor(props) {
  9         super(props);
 10         let d = new Date();
 11         //初始化修改狀態屬性
 12         this.state = {
 13             visible: false,
 14             queryParam: {
 15                 'activityId': this.props.evaluateData.activity.activityId,//活動ID
 16                 'statisDate': d.getFullYear() + "" + (d.getMonth() + 1) + "" + d.getDate(),//查詢日期預設當天
 17                 'userType': 1,//用戶類型:1是全部用戶,2是註冊用戶
 18                 'channelId':null,//渠道ID
 19                 'operpId':null,//運營位ID
 20                 'rows':3,// 每頁總條數據
 21                 'page':1//  當前頁
 22             }
 23         }
 24     }
 25     //組件渲染之前調用方法獲取數據
 26     componentDidMount() {
 27         //調用redux中action中的ajax方法,調用相對應的java的方法獲取返回數據
 28         this.props.actions.sceneEvaluateRate(this.state.queryParam);
 29     }
 30     render() {
 31         const sceneEvaluateRateData = this.props.evaluateData.sceneEvaluateRateData.data;
 32         return (
 33             <div>
 34                     <h2 className="common-echart-title-mn">分場景轉化率</h2>
 35                     {/*map方法迴圈獲取echart折線圖*/}
 36                     {
 37                         sceneEvaluateRateData.map((item, index) => {
 38                         return <div><EchartsCom item={item} index={index}></EchartsCom></div>
 39                     })
 40                     }
 41             </div>
 42         );
 43     }
 44 
 45 }  
 46 
 47 //迴圈的組件EchartsCom
 48 const EchartsCom = (props) => {
 49     //提取返回數據中的每日的推薦人次轉化率
 50     function userRateArr() {
 51         let userRateArr = new Array();
 52         props.item.recItemUsers.forEach(function (e, index) {
 53             userRateArr.push(e.userRate*100);
 54         });
 55         return userRateArr;
 56     }
 57 
 58 //提取返回數據中的每日的推薦內容轉化率
 59     function itemRateArr() {
 60         let itemRateArr = new Array();
 61         props.item.recItemUsers.forEach(function (e, index) {
 62             itemRateArr.push(e.itemRate*100);
 63         });
 64         return itemRateArr;
 65     }
 66     //推薦人次轉化率和推薦內容轉化率數組中的最後一個數據,在echart標題上()顯示
 67     const userRateLast = (userRateArr()[(userRateArr().length-1)])?(userRateArr()[(userRateArr().length-1)]) +'%' :'沒有數據';
 68     const itemRateLast = (itemRateArr()[itemRateArr().length-1])?(itemRateArr()[itemRateArr().length-1])+'%':'沒有數據';
 69    //提取返回數據中的日期
 70     function dateArr() {
 71         let dateArr = new Array();
 72         props.item.recItemUsers.forEach(function (e, index) {
 73             dateArr.push(e.date.slice(4,6)+'-'+e.date.slice(6,8));
 74         });
 75         return dateArr;
 76     }
 77     //echart兩個折線圖渲染 方法
 78     function eachCom() {
 79         //推薦人次轉化率折線圖option設置
 80         const optionUsers = {
 81             tooltip: {
 82                 trigger: 'axis'
 83             },
 84             grid: {
 85                 left: '5%',
 86                 right: '5%',
 87                 top:'10px',
 88                 bottom: '5%',
 89                 containLabel: true
 90             },
 91             xAxis: [
 92                 {
 93                     type : 'category',
 94                     boundaryGap : false,
 95                     axisTick:{
 96                         show:false,//是否顯示坐標軸刻度
 97                     },
 98                     /*設置X軸字體樣式*/
 99                     axisLabel: {
100                         show: true,
101                         interval: 0,
102                         rotate: 20,//傾斜30度
103                         textStyle: {
104                             color: '#666',
105                             fontSize: 12,
106                             fontFamily: '微軟雅黑'
107                         }
108                     },
109                     axisLine: {
110                         lineStyle:{
111                             color:'#999'
112                         }
113                     },
114                     data: dateArr()
115                 }
116             ],
117             yAxis: [
118                {
119                     type : 'value',
120                     axisTick:{
121                         show:false,//是否顯示坐標軸刻度
122                     },
123                     //splitNumber:10,//增加Y軸刻度變多
124                     /*設置y軸字體樣式*/
125                     axisLabel: {
126                         show: true,
127                         formatter: '{value}%',
128                         textStyle: {
129                             color: '#666',
130                             fontSize: 12,
131                             fontFamily: '微軟雅黑'
132                         }
133                     },
134                     axisLine: {
135                         lineStyle:{
136                             color:'#999'
137                         }
138                     }
139                 }
140             ],
141             series: [
142                 {
143                     name: '推薦人次轉化率',
144                     type: 'line',
145                     stack: '總量',
146                     symbol: 'star',//節點性狀
147                     itemStyle: {
148                         normal: {
149                             color: "#278BDD" //圖標顏色
150                         }
151                     },
152                     lineStyle: {
153                         normal: {
154                             width: 2,  //連線粗細
155                             color: "#278BDD"  //連線顏色
156                         }
157                     },
158                     smooth: true,//折線圖是趨緩的
159                     data: userRateArr()
160                 }
161             ]
162         };
163         //推薦內容轉化率折線圖option設置
164         const optionItems = {
165             tooltip: {
166                 trigger: 'axis'
167             },
168             grid: {
169                 left: '5%',
170                 right: '0',
171                 top:'10px',
172                 bottom: '5%',
173                 containLabel: true
174             },
175              xAxis: [
176                 {
177                     type : 'category',
178                     boundaryGap : false,
179                     axisTick:{
180                         show:false,//是否顯示坐標軸刻度
181                     },
182                     /*設置X軸字體樣式*/
183                     axisLabel: {
184                         show: true,
185                         interval: 0,
186                         rotate: 20,//傾斜30度
187                         textStyle: {
188                             color: '#666',
189                             fontSize: 12,
190                             fontFamily: '微軟雅黑'
191                         }
192                     },
193                     axisLine: {
194                         lineStyle:{
195                             color:'#9

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

-Advertisement-
Play Games
更多相關文章
  • Annotations ___ They provide information that you need to fully describe your program, but that cannot be expressed in Java. In general the kind of an ...
  • 已知:public class ExceptionText{ public static void main(String[] args){ try{ int i=1; System.out.println(i++); }finally{ System.out.println(++i); } } } ...
  • A 調用攝像頭拍照,自定義裁剪編輯頭像 【新錄針對本系統的視頻教程,手把手教開發一個模塊,快速掌握本系統】B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,開發利器)+快速構建表單; 技術:313596790freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表s ...
  • 在前一篇文中,我們對一個聚合SDK服務端所需要實現的功能作了簡單的分析。通過兩個主要場景的功能流程圖,我們可以看到,作為多款游戲要適配多個渠道的統一請求轉發中心,TYPESDK服務端主要需要實現的功能有以下幾個要點: l 接收請求和返迴響應,通常是HTTP的請求響應。 l 獲取配置信息。 n 識別游 ...
  • 記得第一次接觸HTML5還是在《聯信永益》實習那會兒(2011),當時一個項目技術選型的時候面臨兩種選擇,分別是Silverlight和HTML5,記得當年用的最新的IE瀏覽器版本還是IE9,才剛剛開始支持HTML5。後來考慮到當時各個版本的瀏覽器對HTML5的支持都不怎麼好,最終公司還是選擇了Si ...
  • 周一沒有看聖誕大戰,這幾天比較忙也沒有看賽後的報道,今天就先不扯NBA,隨便扯扯自己。昨天在電腦里找東西的時候翻到以前兼職健身教練時的照片,思緒一下子回到學生時代,腦子久久換不過來。現在深深覺得健身和寫代碼真的是兩個極端,一個往死里做(做動作),一個往死里坐(坐椅子),現在的體重和巔峰時期足足差了6 ...
  • 通常我們說的 Web 動畫,包含了三大類。 CSS3 動畫 javascript 動畫(canvas) html 動畫(SVG) 個人認為 3 種動畫各有優劣,實際應用中根據掌握情況作出取捨,本文討論的是我認為 SVG 中在實際項目中非常有應用價值 SVG 線條動畫。 舉個慄子 SVG 線條動畫,在 ...
  • 安卓手機點擊a標簽去除點擊陰影 在微信瀏覽器中,鏈接到appstore的跳轉全都被屏蔽了(噁心吧),解決辦法一是通過跳轉到騰訊的微應用(應用寶)中,才能通過它接著跳轉到appstore,但是應用寶規定,必須把app上傳到他們平臺審核通過後才能有這個功能,和蘋果商店類似,但是如果沒有安卓版本的app, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...