我正在尝试使用Node和Socket.IO创建ReactJS实时应用程序,但是我很难找到处理客户端socket连接的最佳方法。
我有多个React组件都需要从服务器获取一些信息,并通过socket连接实时传输。但是当在不同的文件中导入socket.io-client
依赖项并建立与服务器的连接时,我会得到多个连接到服务器的连接,这似乎并不是最优的。
因此,我想知道是否有更好的解决方案可以在不必为每个组件创建新连接的情况下共享连接。也许可以在主app.js
文件中进行连接,然后将其传递给子组件以供后续使用。
一些在线平台建议使用context
属性来传递socket变量,但React自己的文档强烈反对使用context。
以下代码仅为示例,不是实际代码,因为实际项目中的代码比需要说明问题的代码要多得多。
foo.js
import React from 'react';
import io from 'socket.io-client';
const socket = io("http://localhost:3000");
class Foo extends React.Component {
// ...
componentDidMount() {
socket.on("GetFooData", (data) => {
this.setState({
fooData: data
});
});
}
// ...
}
bar.js
import React from 'react';
import io from 'socket.io-client';
const socket = io("http://localhost:3000");
class Bar extends React.Component {
// ...
componentDidMount() {
socket.on("GetBarData", (data) => {
this.setState({
barData: data
});
});
}
// ...
}
app.js
import React from 'react';
import ReactDOM from 'react-dom';
import Foo from './foo';
import Bar from './bar';
const App = () => {
return (
<div className="container">
<Foo />
<Bar />
</div>
);
};
ReactDOM.render(
<App />,
document.getElementById("root")
);