通过 Socket.io 更新 React 状态

2024-02-15

我的 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')
);

您可以添加套接字事件侦听器componentDidMount, 像这样

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() {}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Socket.io 更新 React 状态 的相关文章

随机推荐

  • JComponent.paintImmediately() 在 Java Swing 中如何工作?

    我的理解 与 Swing 中的大多数组件 操作不同 对 JComponent repaint 的调用是线程安全的 即虽然重绘请求是从另一个线程 即不是从 EDT 发出的 但实际绘制仅发生在 EDT 中 下面的代码片段演示了这一点 publi
  • 处理分部类、继承和 Visual Studio 生成代码时,通用接口方法应放在哪里

    考虑这种情况 我们有两个由 Visual Studio 生成的类 例如类型化数据集行 这些类派生自我们无法更改的公共基类 我们无法更改这些子类派生的类 但它们是作为部分类生成的 因此我们可以扩展它们 现在我们决定为这两个类实现一个接口 其中
  • 检测用户何时截屏

    我正在寻找一种方法 让我的应用程序在用户截取屏幕截图时收到通知Command Shift 3 or Command Shift 4 一个例子是 Droplr 和 Cloud App 等应用程序 它们会自动上传截取的屏幕截图 我一直在四处寻找
  • 以编程方式设置自定义 UITabBarItem?

    在 iOS 中 TabBarController 中的 TabBar 属性是只读的 如何将自定义项目与特定视图控制器关联 如何访问 tabBar 内的 UITabBarItems 像这样 CustomView custom CustomVi
  • 如何在 R 中将因子格式转换为数字格式而不更改值? [复制]

    这个问题在这里已经有答案了 下面是数据帧 df1 我想将其中的 V2 列从因子格式转换为数字 而不更改当前值 0 0 8 5 3 df1 V1 V2 V3 X2 X3 4470 2010 03 28 0 A 21 53675 0 4471
  • 用于逐步删除随机项的首选 Scala 集合?

    我有一个需要多次迭代的算法 每次迭代都会对集合中的项目进行评分并删除得分最高的项目 我可以填充一个Vector与初始种群一起 不断将其替换为var 或者选择一个可变集合作为val 哪个可变集合最符合要求 你可以考虑一个DoubleLinke
  • 获取控制器内的环境

    我的一个控制器中有一种情况 只能通过 AJAX 访问 我有以下代码 if request gt isXmlHttpRequest response new Response response gt setContent AJAX reque
  • 如何隐藏UINavigationBar 1px底线

    我有一个应用程序 有时需要其导航栏才能与内容融为一体 有谁知道如何摆脱或改变这个烦人的小条的颜色 在下图中我遇到的情况 我正在谈论 根视图控制器 下方的这条 1px 高度线 对于 iOS 13 Use the shadowColor htt
  • 一次查找多个地方的纬度和经度

    我有一长串城镇和城市列表 我想为每个城镇添加纬度和经度信息 有谁知道一次生成此信息的最简单方法 也可以看看对多个地址进行地理编码 https stackoverflow com questions 396819 geocode multip
  • 使用scale_fill_binned()时如何使用特定的填充颜色?

    我想使用我自己的填充颜色 例如 c red blue grey50 black 使用函数时scale fill binned 在 ggplot 代码中 我怎样才能做到这一点 这是一个最小的可重现示例 library tidyverse da
  • 接受可变数量参数的函数

    在本文档中 https developer apple com library prerelease ios documentation Swift Conceptual Swift Programming Language GuidedT
  • 我可以用 AngularJS 更改 Accept-Language 请求标头吗

    有没有办法更改或编辑我发送到 API 的接受语言标头 javascript Jquery 或 Angular 有没有办法 我不想发送默认的 而是发送我的 Cookie 的 在 AngularJS 中 您可以使用以下方法设置通用标头 http
  • 如何访问 Gradle 使用的“java.home”?

    gradlew properties显示没有具有以下值的属性 JAVA HOME 并且以下发出错误 指示不存在此类属性 println org gradle java home println gradle java home printl
  • 在 Google Chrome 扩展中使用 jQuery.ajax

    我使用 jquery ajax 函数将数据从 google chrome 扩展发布到我的网络服务 代码如下 ajax type POST url serviceUrl data data success function msg if ty
  • 将季度/年份格式转换为日期

    我创建了一个函数 将季度年格式的向量强制转换为日期向量 quarter to date c Q1 13 Q2 14 1 2013 03 01 2014 06 01 这是我的函数的代码 quarter to date lt function
  • 用鼠标拖动滚动

    我正在尝试制作一个可滚动面板 但没有滚动条 并通过用鼠标垂直拖动来滚动 这是到目前为止有人帮助我做的 private void panel1 MouseEnter object sender EventArgs e panel1 AutoS
  • 哪个更快? ByVal 还是 ByRef?

    在 VB NET 中 使用方法参数速度更快 ByVal or ByRef 另外 哪个在运行时消耗更多资源 RAM 我通读了这个问题 https stackoverflow com questions 290189 best practice
  • 多对多 EF7

    Models public partial class Film public int FilmID get set public virtual ICollection
  • 单例模板作为 C++ 中的基类[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 根据C 单例设计模式 https stackoverflow com questions 1008019 c singleton design
  • 通过 Socket.io 更新 React 状态

    我的 React 组件使用来自 socket io 的数据作为状态 我不确定如何在更新数据时更新状态而不重新渲染整个组件 示例代码 var socket io var data components key name markup sock