首页 > 解决方案 > 反应钩子条件 useState - JSON.parse(...) 为空

问题描述

我正在使用反应钩子,如果存在,我想从客户端的本地存储中检索一些信息。

下面是我定义的应用程序状态:

const [name, setName] = useState(JSON.parse(localStorage.getItem("personalInfo")).name || "");

我希望如果本地存储中没有数据,那么将使用空字符串作为初始状态。

但是,它会产生错误:TypeError: JSON.parse(...) is null

这表明即使本地存储为空,空字符串仍然不能作为初始状态。

它之前按预期工作,但是在我在另一个组件中添加一些复杂的代码之后,它开始产生错误。知道为什么会发生这种情况,以便我知道在哪里调试吗?

标签: reactjsreact-hooks

解决方案


您可以使用

const localStore = localStorage.getItem("personalInfo")
const [name, setName] = useState(localStore ? JSON.parse(localStore).name : "");

或者您可以安全地解析 JSON

function parseJson(){
    try {
      return JSON.parse(localStorage.getItem("personalInfo")).name;
    } catch(ex){
      return "";
    }
}

const [name, setName] = useState(parseJson();

推荐阅读