Javascript JSON分析错误:意外标识符“0”;“未定义”;使用本地存储

Javascript JSON分析错误:意外标识符“0”;“未定义”;使用本地存储,javascript,reactjs,local-storage,use-context,Javascript,Reactjs,Local Storage,Use Context,我一直在使用useContext从一个页面到另一个页面获取变量,我实现了localStorage,所以我刷新了页面。但是,当我刷新我的门户时 第页我收到了这个错误: JSON解析错误:意外标识符“未定义” 奇怪的是,如果我刷新它的子页面editPortal,就不会出错 有人能帮我吗 _app.tsx: 从“../context/PortalContext”导入{PortalContext}; 函数MyApp({Component,pageProps}){ const[portal,setPort

我一直在使用useContext从一个页面到另一个页面获取变量,我实现了localStorage,所以我刷新了页面。但是,当我刷新我的
门户时
第页我收到了这个错误:
JSON解析错误:意外标识符“未定义”

奇怪的是,如果我刷新它的子页面
editPortal
,就不会出错

有人能帮我吗

_app.tsx:

从“../context/PortalContext”导入{PortalContext};
函数MyApp({Component,pageProps}){
const[portal,setPortal]=useState();
const[loading,setLoading]=useState(true);
useffect(()=>{
const portal=localStorage.getItem('portal');
如果(门户){
setPortal(JSON.parse(portal));
}
设置加载(假);
}, []);
功能选择门户(门户:门户){
setPortal(portal);
如果(窗口类型!==“未定义”){
setItem('portal',JSON.stringify(portal));
}
}
返回(
);
}
portals.tsx

导出默认功能入口(){
const router=useRouter();
const{choosePortal}=useContext(PortalContext);
const baseName=Array.isArray(router.query.baseName)
?router.query.nomeBase[0]
:router.query.nomeBase;
const portal:portal=GetPortals(baseName);
选择门户(门户);
如果(门户){
返回portal.title
}

非常感谢!

谢谢你们的考虑和问题

我相信我存储了一个未定义的
门户
,它发生在完成之前

在设置本地存储之前,我只添加了一个额外的验证
和&portal

  function choosePortal(portal: Portal) {
    setPortal(portal);
    if (typeof window !== 'undefined' && portal) {
      localStorage.setItem('portal', JSON.stringify(portal));
    }
  }

在您尝试解析
portal
之前,您是否检查了它的值?这可能是因为您的本地存储项中包含的值
未定义
,该值不是有效的JSON。有效的JSON以
{
开始,以
}结束
。每个键都应该是一个字符串,每个值都应该是一个数组/对象/字符串/整数。@DimitarDev-JSON不必以
{
开头,以
}
[1]结尾,就像
“1”
(带实际引号)和
1
(后两者在几年前被认为是JSON的“片段”)一样,都是有效的JSON但是这个概念很早就消失了。顶级数组一直都是有效的。)那么
.setItem()
将把一个“real”
undefined
值转换为字符串
“undefined”
,因此在初始化属性时可能有什么问题。当
.getItem()时
被调用,它将返回该字符串,并且
if(portal)
测试将成功。由于从
getItem
获得的唯一可能的值是
null
和一个字符串,我猜您不小心将字符串
“undefined”
存储在本地存储器中(可能是通过将
未定义的
存储在那里;它将自动转换为字符串)。由于
未定义的
是真实的,因此它会传递您的
if(门户)
test。但它不是有效的JSON,因为它的字符串值只是JSON词汇表中没有的
undefined
。您最好的办法可能是查找存储
undefined
的位置。