Join the AI Workshop to learn more about AI and how it can be applied to web development. Next cohort February 1st, 2026
The AI-first Web Development BOOTCAMP cohort starts February 24th, 2026. 10 weeks of intensive training and hands-on projects.
SWR
SWR is a React Hooks library for data fetching, created by Vercel. The name “SWR” comes from stale-while-revalidate, a cache invalidation strategy.
In a Next.js app, SWR is one of the best ways to do a GET request.
Installation
npm install swr
Setting up the fetcher
You need to define a fetcher function. Create a lib/fetcher.js file:
const fetcher = (...args) => fetch(...args).then((res) => res.json())
export default fetcher
Import it at the top of your component’s file:
import fetcher from 'lib/fetcher'
Basic usage
At the top of a component, import useSWR:
import useSWR from 'swr'
Then inside the component, call useSWR to load the data you need:
const { data } = useSWR(`/api/data`, fetcher)
In addition to the data property, the object returned from useSWR contains isLoading and isError. isLoading is especially useful to show some kind of “loading…” visual indication.
Configuration options
You can pass an additional object to useSWR with some options. For example, to limit the number of revalidations SWR does (useful in development mode):
const { data } = useSWR(`/api/data`, fetcher, {
revalidateOnFocus: false,
revalidateOnReconnect: false,
refreshWhenOffline: false,
refreshWhenHidden: false,
refreshInterval: 0
})
Conditional data loading
Sometimes you want to do the request only if you have some data first.
For example, you might need to check if the user is logged in before sending a request to a /api/user endpoint:
import fetcher from 'lib/fetcher'
const { data: userData } = useSWR(
session && session.user ? `/api/user` : null,
fetcher
)
The first parameter is the URL. If it’s null, then SWR does not perform the request.
This pattern is useful when:
- You need to wait for authentication state
- One request depends on data from another request
- You want to conditionally fetch based on user input
Lessons in this unit:
| 0: | Introduction |
| 1: | jQuery |
| 2: | Axios |
| 3: | Moment.js |
| 4: | ▶︎ SWR |
| 5: | XState |
| 6: | PeerJS |