javascript - 将套接字连接传递给组件
问题描述
我有一个使用 socket.io 的反应应用程序,在我的应用程序中我有两条路由(react-router-dom)。登录页面和聊天页面。
在我的登录页面/组件中,我需要定义套接字,const socket =io();
以便我可以提交登录表单和 socket.emit 加入事件。然后用户被重定向到聊天页面。
在我的聊天页面中,我还需要访问各种方法和事件的套接字。
但是我认为我认为定义const socket = io();
两次会建立另一个联系是正确的?有没有办法可以将套接字连接从登录页面传递到聊天页面?
为了清楚...
登录组件:
https://github.com/alienbuild/node-passthe40/blob/master/public/src/components/pages/Login.js
聊天组件:
https://github.com/alienbuild/node-passthe40/blob/master/public/src/components/pages/Chat.js
解决方案
您可以使用React Context
来在组件之间共享套接字对象。
您需要创建一个上下文并将其导出。
import React from 'react'
const SocketContext = React.createContext()
export default SocketContext
并像使用它一样
import React
import SocketContext from './socket-context'
import * as io from 'socket.io-client'
const socket = io()
const App = props => (
<SocketContext.Provider value={socket}>
<YourChildComponent />
</SocketContext.Provider>
)
export default App
更多信息点击这里
推荐阅读
- javascript - Fetch API 返回 415(不支持的媒体类型)
- wpf - WPF:如何添加表格以接受用户在文本框中的输入?
- rust - 为什么 Vec<&str> 在这里缺少生命周期说明符?
- android - 如何在android中包含我自己的库.so文件
- sql - 将 varchar 转换为布尔值
- python - 在 tkinter 的顶层之间传递控件
- java - 是否有任何选项可以使用 java 将 pptx 幻灯片复制到 docx
- php - Laravel 使用查询构建器从日期范围创建行
- if-statement - 如果在第一张纸上的另一个标记复选框上找到一张纸上的名称
- c# - 如何获取数据库表中列名的 JSON 响应