设置 React 组件来监听 socket.io

IT技术 javascript express reactjs socket.io
2021-05-01 19:49:26

我希望我的 React 组件监听来自 socket.io 的事件。如果我的 HTML 文件包括:

<script src="socket.io/socket.io.js"></script>

然后组件的构造函数()有:

this.socket = io(); // eslint-disable-line no-undef

HTML 文件从我的 Express 服务器检索正确的 socket.io 客户端代码,一切正常。

但这感觉太俗气了。我讨厌依赖全局窗口名称空间来查找 io() 函数。让 React 组件通过 socket.io 连接到服务器的最佳实践是什么?谢谢。

3个回答

如果您使用的是 Webpack 或 Browserify 之类的打包器,则可以使用socket.io-client.

例如:

const io = require('socket.io-client');

class MyComponent extends React.Component {
  constructor(...args) {
    super(...args);
    this.socket = io();
  }
  ...
}

我会在所需的事件回调componentWillMountsetState创建套接字

感谢分享。我使用了 componentWillMount 方法。我还添加了连接检测:

componentWillMount() {
  const socket = io(uri)

  socket.on('update', (data) => {
    this.setState({ data, connected: true })
  });

  socket.on('disconnect', () => {
    this.setState({ connected: false })
  });

  socket.on('reconnect', () => {
    this.setState({ connected: true })
  });
}