在條件語句中可以使用React hooks嗎?
不行。
我不知道具體的技術原因,但是這是不可能的。
我在使用SWR和特別是useSWR
hook時碰到了這個問題。
1 | const ({ data } = useSWR(`/api/user`, fetcher) |
我想在使用者登錄時只從API中檢索一些數據,並且我想“好的,我可以這樣做”:
1 | let data |
但是..不行。
React會在控制台中報錯,可能會顯示如下的錯誤訊息:
警告: React檢測到Hooks調用的順序在Course中發生了變化。如果不修正,這將導致錯誤和bug。
解決方案取決於使用的hook。在這種情況下,useSWR
hook提供了一個非常快速和高效的解決方案,因為我可以將API端點替換為null
以避免加載數據:
1 | const ({ data } = useSWR(loggedIn ? `/api/user` : null, fetcher) |
我將條件語句放在應用hook的內部,這使它對我起作用了。
tags: [“React”, “hooks”, “conditional rendering”, “useSWR”]