【问题标题】:Update React state via Socket.io通过 Socket.io 更新 React 状态
【发布时间】:2016-02-29 16:17:00
【问题描述】:

我的 React 组件使用来自 socket.io 的数据作为它的状态。

我不确定如何在更新数据时只更新状态而不重新渲染整个组件。

示例代码。

var socket = io();

var data = {
  components: [{key: '',name: '',markup: ''}]
};


socket.on('data', function(_) {
  data = _;
});

var Components = React.createClass({
  displayName: "Components",

  getInitialState: function getInitialState() {
    return data;
  },

  handleChange: function handleChange() {
    this.setState(data);
  },

  render: function render() {
    /* render */
  }
});

ReactDOM.render(
  React.createElement(Components, {
    data: data
  }),
  document.getElementById('main')
);

【问题讨论】:

    标签: websocket socket.io reactjs


    【解决方案1】:

    你可以给componentDidMount添加socket事件监听器,像这样

    var socket = io();
    
    var data = {
      components: [{key: '',name: '',markup: ''}]
    };
    
    var Components = React.createClass({
      displayName: "Components",
    
      componentDidMount: function () {
        socket.on('data', this.handleData);
      },
    
      componentWillUnmount: function () {
        socket.removeListener('data', this.handleData);
      },
    
      handleData: function (data) {
         this.setState(data);
      }, 
    
      getInitialState: function () {
        return data;
      },
    
      handleChange: function handleChange() {
        this.setState(data);
      },
    
      render: function render() {}
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2020-11-11
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多