我正在尝试创建一个包含react,react-router,socket.io的单页应用程序。我正在使用babel将es6和jsx编译为plain js。
我想在几个不同的路径上的许多不同组件中提供套接字实例。
当用户连接时,我必须创建一个套接字实例(我这样做
import io from 'socket.io-client'
,然后是const socket = io()
)。然后,我希望能够从不同路由(反应路由器)上的不同组件访问此套接字对象。我想保持用户在页面之间移动时的连接。
我目前有一个有效的黑客攻击。我将所有反应组件放在同一页面上,并在此页面顶部放置const socket = io()
来创建套接字实例。然后,我可以在所有组件中使用此全局套接字。我不认为这种方法非常好,因为它需要将所有组件放在一个文件中。
我可以在App组件(具有<Router>
的组件)的状态下定义套接字吗?然后我可以将它作为道具传递给所有路线组件。
似乎上下文(https://facebook.github.io/react/docs/context.html)可能有用,除了链接提到我不应该使用它。我也遇到过redux,但我觉得这对我想要的东西来说是不必要的复杂性。
如果有任何我可以添加或澄清的内容,请告诉我。非常感谢您的帮助!