刷新反应组件

时间:2016-03-30 14:10:50

标签: javascript reactjs

我的node.js服务器每隔10秒发送一次socket.io新数据。在我的Web应用程序中,每当我的服务器发送数据并强制使用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组件。

1 个答案:

答案 0 :(得分:3)

React组件没有更新,因为它没有意识到它的状态发生了变化。您可以通过每次使用不同的key属性创建React组件来强制更新。

render() {
     return (
         <div id="dataAnalytics">
             <Stats key={this.uniqueId()} data={this.state.data}></Stats>
         </div>
    );
}

// Example of a function that generates a unique ID each time
uniqueId: function () {
    return new Date().getTime();
}