我确信我错过了一些明显的东西,欢迎任何帮助。
我需要使用套接字事件,但由于某种原因我无法让 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”。
我确信我错过了一些明显的东西,但我有点失去理智,不知道为什么这不起作用。
接受有关如何调试此问题的任何直接帮助或建议。
socket.on('testing123', (data: string) => console.log("test data", data));
testing123
事件时运行 [socket.io 文档] 而不是在您发送到服务器时运行:
socket?.emit('testing123', {foo: "bar"});