【发布时间】:2021-12-26 04:11:05
【问题描述】:
我在这里遇到了一个有趣的问题。我正在使用与服务器的 Web 套接字通信构建一个反应应用程序。我在 useEffect 钩子中创建了这个 websocket,因此它不能运行多次,否则我最终会得到多个连接。但是,在这个 useEffect 中,我打算使用一些变量,它们实际上位于上下文 (useContext) 挂钩中。并且当上下文值发生变化时, useEffect 中的值不会更新,这是可以理解的。我试过useRef,但没有用。你有什么想法吗?
const ws = useRef<WebSocket>();
useEffect(() => {
ws.current = new WebSocket("ws://localhost:5000");
ws.current.addEventListener("open", () => {
console.log("opened connection");
});
ws.current.addEventListener("message", (message) => {
const messageData: ResponseData = JSON.parse(message.data);
const { response, reload } = messageData;
if (typeof response === "string") {
const event = new CustomEvent<ResponseData>(response, {
detail: messageData,
});
ws.current?.dispatchEvent(event);
} else {
if (reload !== undefined) {
console.log("general info should reload now");
GeneralInfoContext.reload(reload);
}
console.log(messageData);
}
});
});
Web 套接字存储为 ref,以便在此 useEffect 块之外的不同功能中更好地使用
注意:要使用的上下文值实际上是一个函数,GeneralInfoContext.reload()
【问题讨论】:
标签: reactjs react-hooks use-effect use-context