You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js SSR中正确使用SWRConfig?实现疑问与优化咨询

关于SWR在Next.js App Router中SSR集成的实现及发音问题

你的实现是否正确?

你的实现是正确的。SWR的SWRConfig属于客户端组件,无法在Next.js的服务器组件(如layout.tsx)中直接渲染。通过拆分出仅客户端的public_layout.tsx,由服务器组件传递预取的fallbackData并包裹SWRConfig,完全符合Next.js的组件模型和当前SWR版本的规范。

更简洁的配置方式

方式1:简化客户端容器组件

无需单独拆分public_layout.tsx,可以直接在服务器layout.tsx中导入轻量的客户端容器组件,逻辑更紧凑:

// layout.tsx(服务器组件)
import ClientSWRWrapper from './client-swr-wrapper';

// 服务器端预取数据
async function fetchFallbackData() {
  const res = await fetch('https://api.example.com/data', { cache: 'no-store' });
  return res.json();
}

export default async function RootLayout({ children }) {
  const fallbackData = await fetchFallbackData();
  return (
    <html lang="zh-CN">
      <body>
        <ClientSWRWrapper fallbackData={fallbackData}>
          {children}
        </ClientSWRWrapper>
      </body>
    </html>
  );
}
// client-swr-wrapper.tsx(客户端组件,添加'use client'指令)
'use client';
import { SWRConfig } from 'swr';

export default function ClientSWRWrapper({ fallbackData, children }) {
  return (
    <SWRConfig
      value={{
        fallback: {
          // 这里的key要和页面中useSWR的请求key完全匹配
          '/api/data': fallbackData,
        },
      }}
    >
      {children}
    </SWRConfig>
  );
}

方式2:页面级直接传递初始数据

如果只有单个页面需要预取数据,无需全局配置SWRConfig,可以直接在服务器页面组件中预取数据,传递给客户端子组件后用useSWR的initialData选项:

// page.tsx(服务器组件)
import DataComponent from './data-component';

async function fetchInitialData() {
  const res = await fetch('https://api.example.com/data');
  return res.json();
}

export default async function Page() {
  const initialData = await fetchInitialData();
  return <DataComponent initialData={initialData} />;
}
// data-component.tsx(客户端组件)
'use client';
import useSWR from 'swr';

const fetcher = (url) => fetch(url).then(res => res.json());

export default function DataComponent({ initialData }) {
  const { data } = useSWR('/api/data', fetcher, { initialData });
  
  // 渲染数据
  return <div>{data?.content}</div>;
}

SWR的正确发音

SWR的正确读法有两种:

  • 最常用的是逐个字母读:S-W-R,清晰不易混淆;
  • 部分开发者会将其读作单音节词swir(发音类似/ swɜːr /);
    绝对不要读成sewer(/ ˈsuːər /),这个单词是“下水道”的意思,和SWR的含义(stale-while-revalidate)完全无关。

内容的提问来源于stack exchange,提问作者dontfknow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:50:14