在 React 功能组件中使用 setState 更新空对象 {}

时间:2021-08-01 04:30:40

标签: json reactjs setstate

感谢您的关注。当我尝试更新空对象时,我得到了 null。任何帮助表示赞赏。 :)

在 React 功能组件中,useState 是:

const [user, setUser] = useState({});

最初,用户是一个空对象,我尝试用 JSON 对象更新用户。

// 新对象看起来像这样 {jwt:-----, name:-----, email:-----}

setUser(newUser);

但是当我console.log(user)时,我得到了空值。

//整个代码如下:

export default function Test(props) {

  const [user, setUser] = useState({});
  useEffect(() => {
    // when I console.log(userTemp), I got the JSON object as a response as expected
    let userTemp = JSON.parse(localStorage.getItem('thisUser'))
    
    setUser(userTemp);
    // But, when I tried to log user now (even outside of this method), it gives me null.
  }, []);

2 个答案:

答案 0 :(得分:1)

const [user, setUser] = useState({});
  localStorage.setItem('thisUser','{"name":"John", "age":30, "city":"New York"}')
  useEffect(() => {
    let userTemp = JSON.parse(localStorage.getItem('thisUser'));
    console.log(userTemp)
    setUser(userTemp)
    console.log('I want to see updated user')
    console.log(user);
  }, [])

  console.log('Its outside useEffect')
  console.log(user);

我和你做的完全一样,在 console.log 外的 useEffect 中,用户状态按预期更新。有什么不同吗?

答案 1 :(得分:1)

实际上这与您何时将 user 设置为 localStorage 有关,您在回答中没有提到。您应该以这种方式将对象设置为 localStorage

localStorage.setItem("user", JSON.stringify({ id: 1, name: "biraj" }));

你应该从 localStorage 获取对象,如下所示:

let user = JSON.parse(localStorage.getItem("user"));

以下是如何从 localStorage 设置和获取对象的完整示例:

import * as React from "react";

localStorage.setItem("user", JSON.stringify({ id: 1, name: "biraj" }));

export default function App() {
  const [user, setUser] = React.useState({});
  React.useEffect(() => {
    let userTemp = JSON.parse(localStorage.getItem("user"));
    setUser(userTemp);
  }, []);

  return (
    <>
      <h1>{user.id}</h1>
      <h2>{user.name}</h2>
    </>
  );
}

Edit restless-haze-dntx6