我不知道技术上为什么,但这是不可能的。
我是在使用SWR,特别是useSWR 钩子时偶然发现的。
const ({ data } = useSWR(`/api/user`, fetcher)
我想只在用户登录时从API中获取一些数据,我想 "好吧,我可以这样做"。
let data
if (loggedIn) {
;({ data } = useSWR(`/api/user`, fetcher)
}
但是......不行。
React会在控制台中引发错误,也许是一个错误,内容是。
警告。React检测到Course调用的Hooks的顺序发生了变化。这将导致bug和错误,如果不修复的话。
解决方案将根据使用的钩子而不同。在这种情况下,useSWR 钩子提供了一个非常快速有效的解决方案,因为我可以通过null ,而不是API端点来避免加载数据。
const ({ data } = useSWR(loggedIn ? `/api/user` : null, fetcher)
我把条件移到了钩子的调用里面,这使我的工作得以进行。