Reactjs:useEffect首次加載時從未觸發

我正在努力使用useEffect,它在應用程序加載時不會觸發,但只需單擊按鈕即可。這里是我的代碼:

export default function Person() {

const [person, setPerson] = useState({});
const [hitRandomUser, setHitRandomUser] = useState(0);

const fetchData = setCallback(async () => {
   const api = "http://localhost/api/person/random";
   const response = await fetch(api);
   const data = await response.json();
   setPerson(data);
   console.log(data);
  }, []);

 useEffect(() => {
     fetchData();
 }, [hitRandomUser]);

const pax = {
   id: 1549,
   name: "Mikel",
   sexe: "boy",
   pop: 1
};
const onLike = () => {
    setHitRandomUser(hitRandomUser + 1);
    console.log(hitRandomUser);
    console.log("liked");
 };
 return (
      {!person.id && <h1>Loading...</h1>}
      <PersonCard person={person} onLike={onLike} />
  );
}

因此,這段代碼實際上正在使我的應用程序崩潰。問題是useEffect從來不會在使person為空dict時觸發,然后在試圖獲取person.id時在PersonCard崩潰。然而,如果我將pax傳遞給PersonCard,一切都會很好。當我從PersonCard使用onLike函數時,hitRandomUser狀態會發生變化,在這種情況下,useEffect會正確觸發,因為它是一個依賴項。如何在加載時使用useEffect觸發器,或setPerson以便使用它進行渲染?

update

我看到的問題是,如果我使用pax取消讀取person來呈現我的組件,如下所示:

return (
      <PersonCard person={pax} onLike={onLike} />
  );

我可以看到useEffect實際上被正確呈現,因為我可以看到帶有的console.log(data)的結果被正確顯示。所以應該有什么東西會引發錯誤,但我看不出來。

? 最佳回答:

在這種情況下,useEffect很可能由于初始渲染期間發生的錯誤而未運行。組件生命周期可以讓您了解什么在何時何地運行。

我建議使用提前返回語句(在我們的討論中,您在JSX中使用了一個標準條件,它也可以工作,但我認為提前返回更適合這個用例)。

您可以這樣做:

if (!persona.id) {
  return <div>Loading…</div>;
}

// Other return goes here

就在呈現PersonCard的返回語句的正上方。這將停止執行并顯示加載消息,直到滿足前提條件,在這種情況下React將自動re-evaluate和re-render組件。

主站蜘蛛池模板: 日本伊人精品一区二区三区| 国产精品被窝福利一区| 精品人妻一区二区三区四区在线| 国模吧无码一区二区三区| 免费高清av一区二区三区| 99精品国产高清一区二区| 久久国产精品免费一区二区三区 | 国产激情一区二区三区在线观看| 日韩爆乳一区二区无码| 亚洲乱色熟女一区二区三区丝袜| 亚洲国产精品一区二区三区久久| 国模精品一区二区三区视频| 精品人无码一区二区三区 | 在线精品视频一区二区| 任你躁国语自产一区在| 国产成人精品一区二区秒拍| 亚洲乱码国产一区三区| 蜜桃传媒视频麻豆第一区| 国产品无码一区二区三区在线蜜桃 | 国产肥熟女视频一区二区三区| 国模私拍福利一区二区| 亚洲日本乱码一区二区在线二产线 | 国产av一区二区三区日韩 | 国产精品无码一区二区在线观一| 精品一区二区三区无码免费直播 | 麻豆视频一区二区三区| 国产aⅴ精品一区二区三区久久| 日韩免费无码一区二区视频| 日本人的色道www免费一区| 日本免费一区二区三区最新| 老湿机一区午夜精品免费福利| 全国精品一区二区在线观看| 一区二区三区免费视频播放器| AV无码精品一区二区三区宅噜噜| 伊人精品视频一区二区三区| 国产精品免费一区二区三区四区| 无码人妻久久一区二区三区| 精品一区二区三区免费毛片爱| 亚洲av无码片vr一区二区三区| 国产伦精品一区二区三区免.费| 国产美女视频一区|