搜尋

首頁  >  問答  >  主體

為什麼我的 useEffect 無法「取得」數據,直到我必須將 props 重寫到其他元件...?

我嘗試從伺服器「取得」「使用者資訊」。

API GET url 為:/users/${memberId} userID為數字型別memberId(例4)

以下是我的問題..

當我點擊「 」上的「userIcon」時,我應該連結頁面並載入正確的使用者資訊

當我嘗試直接檢查本地主機的頁面時,它沒有顯示。 但是當我刪除“ userId={userData.memberId} ”時,頁面就會顯示並重寫 「 userId={userData.memberId} 」並儲存,頁面也正常了。

//Header.tsx

useEffect(() => {
    const userGetData = async () => {
      return call(`/users`, 'GET', null)
      .then((res) => {
        const data = res[0]
        setUserData(data);
      });
    };

    userGetData();
  }, [])

...

return(
...
  <div>
      <LoginHeader changeNav={isUser.isLogin} userID={userData.memberId} />
   </div>
)

“userId={userData.memberId}”中的連結用於路徑UserPage。 這是console.log(userData)

在此輸入圖像描述

//LoginHeader.tsx
// UserIcon
            <Link to={`/users/${userID}`}
            state={{userID: userID}}
            className="relative p-2 text-gray-500 bg-transparent"
            >
              <img/>
            </Link>

問題是當我單擊該 UserIcon 時,它不起作用並且出現錯誤。 錯誤告訴我<<无法读取未定义的属性(读取'memberId')>>

那麼..為什麼我的程式碼不起作用? :點選使用者圖示 -> 使用 uerl /users/${memberId} 前往 UserPage。 為什麼在我刪除 LoginHeader 中的 memberId 道具之前 useEffect 'GET' 不起作用? ? ?

P粉985686557P粉985686557311 天前677

全部回覆(1)我來回復

  • P粉465675962

    P粉4656759622024-01-18 07:56:06

    因為userData未定義。您沒有顯示在何處/如何初始化它,但大概是這樣的? :

    const [userData, setUserData] = useState();

    這會將其初始化為未定義。因此,當元件首次呈現時,您無法從 userData 讀取屬性,因為它是未定義。它可能在稍後的時間有一個值,但那時程式碼已經拋出了錯誤。

    一種選擇是將其初始化為空物件:

    const [userData, setUserData] = useState({});

    在這種情況下,userData.memberId 不會拋出錯誤,但會向該元件傳遞一個 undefined 值。

    另一個選項是在 userData 具有值之前不渲染元件:

    <div>
      { userData ? <LoginHeader changeNav={isUser.isLogin} userID={userData.memberId} /> : null }
    </div>

    您喜歡什麼選項完全取決於您。但最主要的是您無法從 undefined 讀取屬性。

    回覆
    0
  • 取消回覆