【发布时间】:2016-03-30 14:10:49
【问题描述】:
我的 node.js 服务器每 10 秒发送一次 socket.io 新数据。在我的网络应用程序中,每次我的服务器发送数据并使用 forceUpdate() 强制更新时,我都会更新 this.state
但是,我的反应组件没有刷新,我不知道为什么。我跟着文档,但我错过了一些东西......
家长:
class DataAnalytics extends React.Component {
constructor(props) {
super(props);
socket = this.props.socket;
this.state = {data: []};
socket.on('dataCharts', (res) => {
console.log("new data charts : "+res);
var data = JSON.parse(res);
this.setState({data: data});
this.forceUpdate();
});
}
componentWillUnmount() {
socket.off('dataCharts');
}
render() {
return (
<div id="dataAnalytics">
<Stats data={this.state.data}></Stats>
</div>
);
}
}
export default DataAnalytics;
孩子:
class Stats extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div className="stats" style={{textAlign:'center'}}>
<h4>Number: </h4>
</div>
);
}
componentDidUpdate() {
var data = this.props.data;
if(!jQuery.isEmptyObject(data)) {
$( ".stats" ).html("<h4>Number : data['nb']['counterIn']</h4>");
}
}
}
export default Stats;
任何人都知道如何自动刷新我的 React 组件。
【问题讨论】:
-
this.setState()可能会帮助你 -
我的父组件中有 this.setState()... 我尝试将它放在不同的方法中(componentDidUpdate、componentWillMount ...),但结果相同:/
-
您在 parent 中的设置看起来是正确的:每个周期的数据都应该是新的,并且 setState() 应该重新渲染 parent +child,甚至不需要 forceUpdate()。你确定插座工作正常吗?你有多个 console.log 行吗?
标签: javascript reactjs