javascript - 如何使 React 组件在接收到 Web 套接字上的更新后重新加载?

标签 javascript reactjs sockets websocket

我有一个 React JS 页面,其中有一个表格。我的要求如下:

  • 加载表(使用 React Table),调用数据 API 并填充表
  • 在客户端启动网络套接字连接并监听任何更新
  • 当数据库中添加条目时,另一端的 websocket 服务器会发送更新(事件),因此我需要调用数据 API 来获取更新的信息
  • 通过网络套接字接收到任何更新(基本上是一个事件)后,我需要再次重新加载表格组件,以便对数据 API 进行 API 调用,进而用新数据填充表格。

我现在的实现如下:

  • 加载表格、调用 API、填充表格
  • 打开 websocket 并监听任何更新。
  • 收到任何更新事件后,我会再次调用 API 并重新加载表格。

我只使用 React,没有使用 Redux 或 MobX 进行状态管理。上面的方法有效,但我想知道这是唯一的方法还是有更好的方法来实现上述方法?

最佳答案

最好问问自己有多少数据将发生变化,以及有多少用户将使用您的平台。随着这些数字的增长,您的实现可能会发生变化,因为您不想让 API 因请求而重载。

在过去的一个项目中,我在 React/Redux 中使用了 websockets,并遵循与您相同的路径,它表现良好,并且可能是您将获得的最好的。

另一种明智的方法是将添加到表中的数据与 websocket 更新函数一起发送,这样您就不必再次调用数据库。我想说,对于消息传递平台来说,这是一个更好的解决方案,而不是您正在做的事情。但如果许多用户经常获取这些更新,这也可能是一个好方法,因为它将更好地管理 API 上的负载。

我可能会坚持您的实现,因为它是可行的,但请确保您将代码保持在可以根据需要轻松更改的状态。

关于javascript - 如何使 React 组件在接收到 Web 套接字上的更新后重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069313/

相关文章:

javascript - 将值从一个字段传递到另一个字段

javascript - 如何使用两个不同的 ui 路由器在 angularjs 中的状态之间共享范围数据?

javascript - 如何根据格式(缩进等)不同的另一个文本中的一个文本获取子字符串?

reactjs - 如何更新 componentDidMount 内的上下文状态?

代理服务器的 C# 性能(与 C++ 相比)

linux - SOCK_SEQPACKET正在缓冲约42k的数据,如何将其限制为更少?

javascript - jQuery:如何解除绑定(bind)到文档对象的事件?

javascript - React 功能组件在重新渲染时重新初始化局部函数和变量(React Hooks)

javascript - Redux createStore 源代码 - 增强器递归的回调部分存在无限循环风险?

c - 非阻塞 connect() 和 EINTR