我可以在条件中使用React hook吗?

68 阅读1分钟

我不知道技术上为什么,但这是不可能的。

我是在使用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)

我把条件移到了钩子的调用里面,这使我的工作得以进行。