我想存盤套接字,以便可以在不同的組件中使用它。當我登錄后第一次在socket.io上設定套接字時,我將套接字設定為“套接字”狀態下的狀態,然后將其存盤在localStorage中。
useEffect(() => {
if(!socket) {
setSocket(io(backendLink));
};
}, [])
useEffect(() => {
socket?.emit("newUser", localStorage.getItem('authToken'));
localStorage.setItem('socket', JSON.stringify(socket));
}, [socket])
然后在不同的組件中,我最初沒有設定套接字。我使用這樣的邏輯:
useEffect(() => {
if(!socket) socket = localStorage.getItem('socket');
socket.emit(...)
}, [userID])
上面,如果作為存盤在 state 中的 props 傳遞的套接字為 null,我從 localStorage 恢復套接字并使用它來發射。但是,我得到了 Uncaught TypeError: Converting circular structure to JSON。
據我了解,這是因為我將 JSON.stringify 用于無法以這種方式轉換并存盤在 localStorage 上的東西上,即套接字。我想使用 vanilla reactjs 將套接字用作與我使用 setSocket(io(backendLink)) 的檔案不同的檔案。如何使用香草 reactJS(無背景關系,完全香草)在不同組件中使用 socket.io?
uj5u.com熱心網友回復:
你不應該對這些物件進行字串化,如果你想在你的應用程式中參考它,你只需要在將它保存在狀態之后將它放在 React 背景關系中。這樣你就可以在你的應用程式中的任何地方訪問它。還有其他選擇,但這是更安全的選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/462587.html
標籤:javascript 反应 插座 套接字.io 梅尔
