Reactjs 使用mqtt的HighCharts实时数据
我正在尝试使用react和highcharts准备实时图表。我正在使用Reactjs 使用mqtt的HighCharts实时数据,reactjs,highcharts,mqtt,livegraph,Reactjs,Highcharts,Mqtt,Livegraph,我正在尝试使用react和highcharts准备实时图表。我正在使用react mqtt检索实时数据,并将数据作为道具传递给Highchart组件 图表正在呈现,但每次数据出现时,它都会重新呈现组件 我的期望是,它应该像心跳图一样流动。但是多线心跳 主页: import React from 'react'; import { Helmet } from 'react-helmet'; import { Formatted
react mqtt
检索实时数据,并将数据作为道具传递给Highchart组件
图表正在呈现,但每次数据出现时,它都会重新呈现组件
我的期望是,它应该像心跳图一样流动。但是多线心跳
主页:
import React from 'react';
import { Helmet } from 'react-helmet';
import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { compose } from 'redux';
import { createStructuredSelector } from 'reselect';
import Chart from 'components/HighCharts';
import { Connector } from 'mqtt-react';
import {subscribe} from 'mqtt-react';
const MessageContainer = subscribe({topic: 'system_monitor'})(Chart);
export class HomePage extends React.PureComponent {
render() {
return (
<article>
<Helmet>
<title>Home Page</title>
<meta name="description" content="A React.js Boilerplate application homepage" />
</Helmet>
<div>
<Connector mqttProps="ws://localhost:1884/">
<MessageContainer/>
</Connector>
</div>
</article>
);
}
}
从“React”导入React;
从“react Helmet”导入{Helmet};
从“react intl”导入{FormattedMessage};
从'react redux'导入{connect};
从'redux'导入{compose};
从“重新选择”导入{createStructuredSelector};
从“组件/高图表”导入图表;
从“mqtt react”导入{Connector};
从“mqtt react”导入{subscribe};
const MessageContainer=subscribe({topic:'system_monitor'})(图表);
导出类主页扩展了React.PureComponent{
render(){
返回(
主页
);
}
}
海图组件代码:
import React, { Component } from 'react';
import HighCharts from 'react-highcharts';
export default class SplineChart extends Component {
constructor(props) {
super(props);
this.config = {
chart: {
type: 'spline',
animation: HighCharts.svg,
marginRight: 10,
width: 700,
height: 360,
},
title: {
text: 'RFID Chart'
},
legend: {
enabled: true
},
exporting: {
enabled: false
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
hour: '%I',
minute: '%I:%M',
seconds: '%I:%M:%S'
},
title: {
text: 'Time'
}
},
yAxis: {
title: {
text: 'Heart Beat'
}
},
series: this.props.data
}
}
render() {
console.log(this.props.data)
return (
<div>
<HighCharts config={this.config}></HighCharts>
</div>
);
}
}
import React,{Component}来自'React';
从“react HighCharts”导入HighCharts;
导出默认类SplineChart扩展组件{
建造师(道具){
超级(道具);
this.config={
图表:{
类型:“样条线”,
动画:HighCharts.svg,
marginRight:10,
宽度:700,
身高:360,
},
标题:{
文本:“RFID图表”
},
图例:{
已启用:true
},
出口:{
已启用:false
},
xAxis:{
键入:“日期时间”,
日期时间标签格式:{
小时:'%I',
分钟:'%I:%M',
秒数:“%I:%M:%S”
},
标题:{
文字:“时间”
}
},
亚克斯:{
标题:{
文字:“心跳”
}
},
系列:this.props.data
}
}
render(){
console.log(this.props.data)
返回(
);
}
}
检查并使用addPoint()
动态添加点
componentDidMount() {
let chart = this.refs.chart.getChart();
//chart.series[0].addPoint({x: 10, y: 12});
//below is for demo
// set up the updating of the chart each second
var series = chart.series[0];
setInterval(function () {
var x = (new Date()).getTime(), // current time
y = Math.random();
series.addPoint([x, y], true, true);
}, 1000);
}
演示请发布您的代码。改进了格式。添加了代码@ColinSample data from my local mqtt server:x值为TimeStamp,y数据点[{“data”:[[1524903290174,50],[1524903295176,55],[152490330182,0],[1524903305185,5]}。数据每秒都会出现。但是,您上面给出的内容对我没有用处,因为我需要从mqtt
chart.series[0].addPoint({x:10,y:12})传递数据代码>意味着addPoint
是一种更新图表的方法,无需重新加载可在mqtt中使用的图表,但当我在highchart组件中接收数据时,它会重新呈现。我在索引中调用mqtt并将数据传递给图表组件,它会重新呈现整个组件吗?如果是,我在哪里可以订阅mqtt?我已经更新了shouldComponentUpdate中的状态并将return设置为false,以便停止重新渲染。希望它能解决我的问题。谢谢你的建议。