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