gpt4 book ai didi

javascript - useEffect 不监听 localStorage

转载 作者:行者123 更新时间:2023-12-03 06:56:04 25 4
gpt4 key购买 nike

我正在制作一个身份验证系统,在后端将我重定向到前端页面后,我正在为 userData 发出 API 请求,并将该数据保存到 localStorage。然后我尝试加载 Spinner 或 UserInfo。
我正在尝试使用 useEffect 监听 localStorage 值,但登录后我得到“未定义”。当 localStorage 值更新时,useEffect 不会再次运行,并且 Spinner 会一直旋转。
我试过做:JSON.parse(localStorage.getItem('userData')) ,但后来我得到了一个 useEffect 无限循环。
只有当我刷新页面时,我的 localStorage 值才会出现,并且我可以显示它而不是 Spinner。
我做错了什么?
准备好后,也许有更好的方法来加载 userData ?
我正在尝试以正确的方式更新 DOM?
感谢您的回答;)

import React, { useState, useEffect } from 'react';
import { Spinner } from '../../atoms';
import { Navbar } from '../../organisms/';
import { getUserData } from '../../../helpers/functions';

const Main = () => {
const [userData, setUserData] = useState();
useEffect(() => {
setUserData(localStorage.getItem('userData'));
}, [localStorage.getItem('userData')]);

return <>{userData ? <Navbar /> : <Spinner />}</>;
};

export default Main;

最佳答案

最好在此处为 localstorage 添加事件监听器。

useEffect(() => {
function checkUserData() {
const item = localStorage.getItem('userData')

if (item) {
setUserData(item)
}
}

window.addEventListener('storage', checkUserData)

return () => {
window.removeEventListener('storage', checkUserData)
}
}, [])

关于javascript - useEffect 不监听 localStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61178240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com