NodeJS 我可以socket.io在redux商店中存储www.example.com套接字吗?(并调用其函数)

nue99wik  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(113)

我试图将为App.js中的客户端创建的套接字存储在我的Redux商店中?我不确定这是否是一个好主意,但我希望能够在多个组件中访问同一个套接字,所以我想我可以像对其他对象那样做。
然而,到目前为止,我在redux存储中存储的东西都是带有字段的严格对象,我从来没有存储过具有函数的对象。
当我尝试调用存储的socket的函数时,我得到:TypeError:this.props.socket.emit不是函数。
我猜这意味着我不能使用Redux存储类实体。是这样吗?
什么是正确的解决方案呢?

gkl3eglg

gkl3eglg1#

最好的方法是隔离所有处理套接字的代码,只公开那些组件调用的函数(比如socket.send(message: string)发送消息等)。
不要担心import一次又一次地执行相同的模块/文件,因为无论您导入/请求它多少次,都会返回相同的示例。因此,隔离套接字函数并在需要的地方导入它们是安全的。
此外,Redux是一个状态管理库,因此请不要期望它处理函数和其他高级功能。

nle07wnf

nle07wnf2#

Middleware是Redux应用程序中持久连接(如websockets或www.example.com socket)的正确位置,原因如下:socket.io socket in a Redux app, for several reasons:

  • 中间件在应用程序的生命周期内存在
  • 与商店本身一样,您可能只需要整个应用程序都可以使用的给定连接的单个示例
  • 中间件可以看到所有分派的动作和分派动作本身。这意味着中间件可以采取已调度的操作并将其转换为通过websocket发送的消息,并在通过websocket接收到消息时调度新的操作。
  • websocket连接示例是不可序列化的,因此它不属于存储状态本身

这些是帮助您开始的好链接:

相关问题