我的 socketIO 已连接并在安装组件时发出初始事件,我将用户名和 socket.id 保存在服务器内存中。 此外,当我 console.log 套接字时,它会记录到控制台并向我显示对象中的套接字 ID 但是在发出初始事件期间,socket.id 是未定义的。因此,整个实时功能不起作用,因为我无法将事件发送给特定用户。
useEffect(() => {
const socketIO = io("http://localhost:5000");
setSocket(socketIO);
socketIO?.emit("newUser", {
username: profileData?.username,
socketId: socketIO.id, // gives undefined
});
console.log(socketIO);
console.log(socketIO.id); // gives undefined
}, [profileData]);
console.log(socketIO) 给出这个:
Socket {connected: false, recovered: false, receiveBuffer: Array(0), sendBuffer: Array(1), _queue: Array(0), …}
acks
:
{}
connected
:
true
flags
:
{}
id
:
"U1q1lkAb2OXG9_daAAAL"
ids
:
0
io
:
Manager {nsps: {…}, subs: Array(5), opts: {…}, setTimeoutFn: ƒ, clearTimeoutFn: ƒ, …}
nsp
:
"/"
receiveBuffer
:
[]
recovered
:
undefined
sendBuffer
:
[]
subs
:
(4) [ƒ, ƒ, ƒ, ƒ]
_callbacks
:
{}
_opts
:
{path: '/socket.io', hostname: 'localhost', secure: false, port: '5000'}
_pid
:
undefined
_queue
:
[]
_queueSeq
:
0
active
:
(...)
disconnected
:
(...)
volatile
:
(...)
[[Prototype]]
:
Emitter
所以我可以看到 id 但当我尝试这样做时它会记录为未定义。
实际问题是什么?
另外, 我正在将套接字导出到其他组件。 当我使用 socket.emit 或 socket.on 时,它会提示我“socket.on 不是函数”
为什么会这样。