Skip to content

配合 Next.js 使用

Client Side Data Fetching(客户端数据请求)

如果你的页面包含频繁更新的数据,并且你不需要预渲染数据,那么 SWR 是一个完美选择,而且不需要特别配置:只需要 import useSWR 并在使用该数据的任意组件中使用 hook 即可。

工作原理:

  • 首先,立即显示没有数据的页面。可以显示丢失数据的加载状态。
  • 然后,在客户端请求数据并在准备就绪时显示它。

这种方法适用于 user dashboard pages。因为 dashboard 是一个私有的、特定于用户的页面,与 SEO 无关,页面也不需要预渲染。数据经常更新,这需要 request-time data fetching。

Pre-rendering(预渲染)

如果页面必须预渲染,Next.js 支持 2种形式的预渲染
Static Generation (SSG)Server-side Rendering (SSR)

用 SWR,你可以为了 SEO 预渲染页面,并且还有诸如缓存、重新验证、聚焦跟踪、在客户端间隔重新请求等功能。

你可以将预请求的数据作为初始值传递给 initialData 选项。比如和 getStaticProps 一起:

export async function getStaticProps() {
// 在服务器端调用 `getStaticProps`,
// 所以 `fetcher` 函数将在服务端执行。
const posts = await fetcher('/api/posts')
return { props: { posts } }
}
function Posts (props) {
// 这里的 `fetcher` 函数将在客户端执行。
const { data } = useSWR('/api/posts', fetcher, { initialData: props.posts })
// ...
}

页面仍然是预渲染的的。这意味着它对 SEO 是友好的,可以高速缓存和访问。但 after hydration,它在客户端还是完全由 SWR 控制。这意味着数据可以是动态的,并且可以根据时间和用户交互而自动更新。

💡

在上面的示例中,fetcher 用来从客户端和服务端加载数据,它需要同时支持2种环境。但这不是必需的。你可以使用不同的方法从服务端或客户端加载数据。