reactjs 无法仅在刷新时读取未定义的属性

bgtovc5b  于 2023-03-12  发布在  React
关注(0)|答案(1)|浏览(115)

在使用firebase和react设置配置文件时,我得到Cannot read properties of undefined: (reading 'name')的错误。然而,奇怪的是,当我保存更改时并没有发生这种情况,而是当我刷新页面时。我很好奇,为什么会发生这种情况?
以下是刷新前(保存我的工作时):

以下是刷新localhost后的情况:

下面是我目前的代码:

useEffect(() => {
    onAuthStateChanged(auth, async (user) => {
      if (user) {
        const snapshot = await getDoc(doc(db, "users", user.uid))
        console.log(snapshot.data().name)
        const userData= snapshot.data();
        
        setProfile(userData);

      } 
    });
  }, []);


  return (
    <>
      
      <Card>
        <Card.Body>
          <h2 className="text-center mb-4"> Profile</h2>
          <p className="details">
          {JSON.stringify(profile.name)}
          </p>
          {error && <Alert variant="danger">{error}</Alert>}
        </Card.Body>
      </Card>
      <div className="w-100 text-center mt-2">
        <Button variant="link" onClick={handleLogout}>
          {" "}
          Log out{" "}
        </Button>
      </div>
    </>
  );
};

现在,我将继续使用JSON.stringify(profile),因为它工作正常,但只是对这个问题感到好奇。

yyyllmsg

yyyllmsg1#

无法读取未定义的属性:(阅读“姓名”)

这个错误意味着,name没有可用的属性。这个问题是你遇到的bcoz DOM是第一次渲染没有API数据,然后useEffect调用。
要解决此问题,可以使用
1.可选链接:-如profile?.name
1.使用条件渲染:-

{profile?.name && (<p className="details">
  {JSON.stringify(profile.name)}
  </p>)}

对于此类错误,始终使用这些选项。

相关问题