socket.emit什么也没做,但socket.on似乎起作用了

问题描述 投票:0回答:1

我确信我错过了一些明显的东西,欢迎任何帮助。

我需要使用套接字事件,但由于某种原因我无法让 socket.emit/socket.on 工作。使用 React 和 Typescript。

我正在使用以下内容:

(有状态

socket
变量在 .on('connect', ...) 事件之后设置)

useEffect(() => {
  if (socket) { 
    socket.on('testing123', (data: string) => console.log("test data", data))
  }
}, [socket]);

页面上的按钮:

<button
  onClick={() => {
    console.log('button click');
    socket?.emit('testing123', {foo: "bar"});
  }}
>
</button>

就是这样。当我单击按钮时,我看不到 console.log('test data', data)。 插座已连接。我可以在 .emit 之前和 .on 之前

console.log(socket)
,它显示相同的对象、相同的 id 等。

如果我在 .emit 之前记录套接字,我会看到该对象包含 _callbacks,它们被列为“$connect”和“$testing123”。它似乎包含正确的函数(如 (data: string) => console.log("test data", data)))。当我单击按钮时,

socket.onAnyOutgoing((eventName, ..args) => console.log(eventName))
会打印事件“testing123”。

我确信我错过了一些明显的东西,但我有点失去理智,不知道为什么这不起作用。

接受有关如何调试此问题的任何直接帮助或建议。

reactjs sockets socket.io
1个回答
0
投票
socket.on('testing123', (data: string) => console.log("test data", data));

仅在服务器向您发送

testing123
事件时运行 [socket.io 文档] 而不是在您发送到服务器时运行:

socket?.emit('testing123', {foo: "bar"});
© www.soinside.com 2019 - 2024. All rights reserved.