为了账号安全,请及时绑定邮箱和手机立即绑定

如何将单个 Socket IO 实例传递给具有 Context API 的页面?

如何将单个 Socket IO 实例传递给具有 Context API 的页面?

慕斯王 2021-08-20 15:28:26
所以我试图在我的整个应用程序中使用一个 Socket IO 实例并从多个组件访问它。我已经搜索了很多,也尝试了很多......没有任何成功。现在我正在使用 React Context API。我正在初始化我的SocketContextin SocketProvider.js:import React from 'react'const SocketContext = React.createContext()export default SocketContext打开套接字并提供它App.js:import React from 'react';import Main from './components/Main/Main';import io from 'socket.io-client';import SocketContext from './services/SocketProvider'function App() {  const socket = io("http://localhost:8000")  return (    <div className="App">      <SocketContext.Provider value={socket}>      <MuiPickersUtilsProvider>        <MuiThemeProvider >          <Main />        </MuiThemeProvider>      </MuiPickersUtilsProvider>      </SocketContext.Provider>    </div>  );}export default App;路由Main.js:function Main() {  return (    <main>      <Switch>        <Route exact path="/" component={Menu} />        <Route path="/panorama" component={Panorama} />        <Route path="/movie" component={Movie} />        <Route          path="/timelapse"          render={({ match: { url } }) => (            <>              <Route path={`${url}/`} component={Timelapse} exact />              <Route path={`${url}/running`} render={(props) => <Running {...props} type={'timelapse'} />} />            </>          )}        />      </Switch>    </main>  );}export default Main;
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

错误是在href我的 Button 上更改 Route使用Link组件,这不会触发应用程序的完全重新加载,从而初始化一个新的 Socket IO 实例。

所以不要使用:

<Button variant="outlined" onClick={this.timelapse} href="/timelapse/running">Start</Button>

我不得不使用:

<Button variant="outlined" onClick={this.timelapse} component={ Link } to="/timelapse/running">Start</Button>

希望这可以作为遇到相同问题的人的解决方案。


查看完整回答
反对 回复 2021-08-20
  • 3 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信