如何在 vanilla ReactJS 的不同组件上的 localStorage/use 套接字上存储套接字以供在不同组件 socket.io 中使用?
How to store socket on localStorage/use socket on different components on vanilla ReactJS for use in different components socket.io?
我想存储套接字以便我可以在不同的组件中使用它。
我在登录后第一次在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])
以上,如果作为存储在状态中的道具传递的套接字为空,我从 localStorage 恢复套接字并使用它来发出。但是,我得到 Uncaught TypeError: Converting circular structure to JSON.
据我了解,这是因为我在无法以这种方式转换和存储在 localStorage 上的东西上使用了 JSON.stringify,即套接字。我想使用 vanilla reactjs 将套接字用作与我使用 setSocket(io(backendLink)) 的文件不同的文件。如何使用普通 reactJS 跨不同组件使用 socket.io(无上下文,完全普通)?
你不应该将这些对象字符串化,如果你想在你的应用程序中引用它,你需要在将它保存在状态后将它放在 React 上下文中。这样你就可以在你的应用程序中的任何地方访问它。还有其他选择,但这是更安全的选择。
我想存储套接字以便我可以在不同的组件中使用它。 我在登录后第一次在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])
以上,如果作为存储在状态中的道具传递的套接字为空,我从 localStorage 恢复套接字并使用它来发出。但是,我得到 Uncaught TypeError: Converting circular structure to JSON.
据我了解,这是因为我在无法以这种方式转换和存储在 localStorage 上的东西上使用了 JSON.stringify,即套接字。我想使用 vanilla reactjs 将套接字用作与我使用 setSocket(io(backendLink)) 的文件不同的文件。如何使用普通 reactJS 跨不同组件使用 socket.io(无上下文,完全普通)?
你不应该将这些对象字符串化,如果你想在你的应用程序中引用它,你需要在将它保存在状态后将它放在 React 上下文中。这样你就可以在你的应用程序中的任何地方访问它。还有其他选择,但这是更安全的选择。