Reactjs Socket.io connected属性始终为false

Reactjs Socket.io connected属性始终为false,reactjs,socket.io,Reactjs,Socket.io,我正在尝试创建一个私人消息应用程序。套接字首先连接,但当我尝试从客户端发出任何事件时,它显示socket.connected属性为false。 请帮帮我 这是我的客户端代码,请注意socket.on(“用户”)部分工作正常,因为所有这些都发生在它连接的套接字上。这意味着连接部分正在正确进行。之后,每当我尝试调用发出套接字事件的函数时,它都会显示socket.connected属性为false,并且不会执行任何操作 任何帮助都将不胜感激 var connectionOptions = {

我正在尝试创建一个私人消息应用程序。套接字首先连接,但当我尝试从客户端发出任何事件时,它显示socket.connected属性为false。 请帮帮我

这是我的客户端代码,请注意socket.on(“用户”)部分工作正常,因为所有这些都发生在它连接的套接字上。这意味着连接部分正在正确进行。之后,每当我尝试调用发出套接字事件的函数时,它都会显示socket.connected属性为false,并且不会执行任何操作

任何帮助都将不胜感激

var connectionOptions = {
    transports: ["websocket"],
    autoConnect: false,
  };
  socket = io("http://localhost:3001", connectionOptions);

  socket.on("connection _error", (err) => {
    if (err.message === "invalid username") {
      console.log("ERROR");
    }
  });

  socket.on("users", (users) => {
    users.forEach((user) => {
      user.self = user.userID === socket.id;
      //initReactiveProperties(user);
    });

    socket.on("user connected", (user) => {
      // TODO
      setUsers((existingusers) => [...existingusers, user]);
      console.log(user);
    });
    // put the current user first, and then sort by username
    users = users.sort((a, b) => {
      if (a.self) return -1;
      if (b.self) return 1;
      if (a.username < b.username) return -1;
      return a.username > b.username ? 1 : 0;
    });
    //console.log(users);
  });

  socket.on("private message", ({ content, from }) => {
    console.log(content);
  });

  useEffect(() => {
    const username = localStorage.getItem("username");
    console.log(username);
    socket.auth = { username };
    socket.connect();
  }, []);

  function SendMessage() {
    socket.emit("test", "hello");
    // selectedChatUser
    console.log(socket.connected);
    if (selectChatUser) {
      socket.emit("private message", {
        content: "hello there",
        to: selectChatUser.userID,
      });
      console.log("Message Sent");
    }
  }

每次渲染组件时,将重新运行以下行,从而丢失对实际连接的套接字的引用:

socket = io("http://localhost:3001", connectionOptions);
可以使用ref在渲染之间保持它:

const socketRef = useRef();
socketRef.current = socket;
// use socketRef.current everywhere else in your code

是的,我理解,问题解决了。谢谢!!
const socketRef = useRef();
socketRef.current = socket;
// use socketRef.current everywhere else in your code