https://slides.com/syujihiga/nextjs-swr
// REST API
const { data } = useSWR('/api/v1/user')
// GraphQL
const { data } = useSWR(
`{
Movie(title: "Inception") {
releaseDate
actors {
name
}
}
}`,
fetcher
)// REST API
const { data } = useSWR('/api/v1/user')
// GraphQL
const { data } = useSWR(
`{
Movie(title: "Inception") {
releaseDate
actors {
name
}
}
}`,
fetcher
)const { data } = useSWR(key, fetcher, {
refreshInterval: 5000, // 間隔
refreshWhenHidden: true, // ウィンドウが非表示のとき
refreshWhenOffline: true // ブラウザがオフラインのとき
})const { data, error } = useSWR(key, fetcher, {
shouldRetryOnError: true, // 再試行するか
errorRetryInterval: 5000, // 再試行の間隔
errorRetryCount: 10, // 再試行の回数
// 細かく設定する場合
onErrorRetry: (error, key, option, revalidate, { retryCount }) => {
if (retryCount >= 5) return
if (error.status === 404) return
setTimeout(() => revalidate({ retryCount: retryCount + 1 }), 3000)
}
})const shouldFetch = false
const { data, error } = useSWR(
shouldFetch ? key : null,
fetcher
)// local
const { data, mutate } = useSWR(key, fetcher)
mutate(
{ ...data, hoge: 1 },
false // refetch するか
)// global
import useSWR, { mutate } from 'swr'
function App() {
mutate(key, { hoge: 1 })
}<!-- トップレベル -->
<link
rel="preload"
href="{key}"
as="fetch"
crossorigin="anonymous">// 個別
mutate(key, fetch(key).then(res => res.json()))const { data } = useSWR(key, fetcher, {
dedupingInterval: 3000
})const initialData = { hoge: 1 }
const { data } = useSWR(key, fetcher, {
initialData
})import { Suspense } from 'react'
function App() {
const { data } = useSWR(key, fetcher, {
suspense: true
})
return (
<Suspense fallback={<div>loading...</div>}>
<div>{data.id}</div>
</Suspense>
)
}