反应钩子条件 useState - JSON.parse(...) 为空

时间:2021-07-13 15:18:11

标签: reactjs react-hooks

我正在使用 react hook,我想从客户端的本地存储中检索一些信息(如果存在)。

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

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

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

然而,它产生了一个错误:TypeError: JSON.parse(...) is null

说明即使本地存储为空,空字符串也不会作为初始状态使用。

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

1 个答案:

答案 0 :(得分:2)

你可以使用

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();