Error: "disconnect" is a reserved event name, why am I getting this error?

Error: "disconnect" is a reserved event name, why am I getting this error?

我正在使用 React、node.js 和 socket.io 构建聊天应用程序。

我有以下用于连接和断开连接的钩子

useEffect(() => {
        const { name, room } = queryString.parse(location.search)
        socket = io(ENDPOINT)

        setRoom(room)

        // New user joins room
        socket.emit('join', { name, room }, (userNamesPresent, error) => {
            setUsersPresent(userNamesPresent.userNamesPresent)
        })

        return () => {
            // User leaves room
            socket.emit('disconnect')

            socket.off()
        }
    }, [ENDPOINT, location.search])

我在节点中这样处理它

io.on("connection", socket => {
    socket.on("join", ({ name, room }, callback) => {
        const { error, user } = addUser({id: socket.id, name, room})
    if(error) {
        return callback({error})
    }
    // Emitting a welcome message
    socket.emit('message', {user: 'admin', text: `Welcome to the chat ${user.name}`})

    // Broadcasting to everyone except the connecting user
    socket.broadcast.to(user.room).emit('message', {user: 'admin', text: `${user.name} has joined ${user.room}`})

    socket.join(user.room)

    // Get the users in room 
    const usersPresent = getUsersInRoom(user.room)

    const userNamesPresent = usersPresent.map(user => {
        return {name: user.name}
    })

    callback({userNamesPresent})
})

socket.on('message-sent', (message, callback) => {
    console.log(socket.id)
    const user = getUser(socket.id)

    io.to(user.room).emit('message', {user: user.name, text: message} )

    callback()
})

socket.on("disconnect", () => {
    console.log("User has disconnected")

    removeUser(socket.id)
})
})

当我离开页面(例如返回上一页)时,出现以下错误

根据 docs,而不是在 useEffect 的清理函数中执行 socket.emit('disconnect'),因为 disconnect 中的保留事件名称Socket.io,可以用socket.disconnect().