Skip to content

Can I use React hooks inside a conditional?

The Valley of Code

Your Web Development Manual

No.

I do not know why technically, but it’s not possible.

I stumbled on this while working with SWR and in particular the useSWR hook.

const ({ data } = useSWR(`/api/user`, fetcher)

I wanted to only retrieve some data from an API when the user was logged in, and I thought β€œok, I can do this”:

let data

if (loggedIn) {
  ;({ data } = useSWR(`/api/user`, fetcher)
}

but.. no.

React will raise errors in the console, maybe an error that reads:

Warning: React has detected a change in the order of Hooks called by Course. This will lead to bugs and errors if not fixed.

The solution will be different depending on the hook used. In this case a very quick and efficient solution was provided by the useSWR hook, because I could pass null instead of the API endpoint to avoid loading the data:

const ({ data } = useSWR(loggedIn ? `/api/user` : null, fetcher)

I moved the conditional inside the hook call, and this made it work for me.

β†’ Get my React Beginner's Handbook
β†’ Read my full React Tutorial on The Valley of Code
  • THE VALLEY OF CODE (+ PRO), your web development manual
  • I wrote 15+ free coding BOOKS, download them here
  • SOLOPRENEUR LAND the missing MBA for wannabe solopreneurs craving a life with more freedom, control, fulfillment and purpose (summer 2024)