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