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

Next.js 13中如何在Server Component中获取查询参数?

Next 13 App目录下Server Component获取查询参数的方法

在Next 13的App目录中,Server Component获取查询参数的方式和之前的getServerSideProps不同,具体分为两种场景:

页面级Server Component

对于app目录下的page.js/page.tsx(包括动态路由页面),Next.js会自动向组件传递searchParams参数,你可以直接解构并使用:

// app/articles/page.js
export default async function ArticlesPage({ searchParams }) {
  // 获取查询参数,无值时用默认值
  const page = searchParams.page || '1';
  const category = searchParams.category || 'all';

  // 结合参数请求数据
  const articles = await fetchArticles(page, category);

  return (
    <div>
      <h2>分类:{category} | 第{page}页</h2>
      {/* 渲染文章列表 */}
    </div>
  );
}

如果是带动态路径的页面(比如app/articles/[id]/page.js),还会同时收到params参数用于获取路径参数,两者可结合使用:

// app/articles/[id]/page.js
export default async function ArticleDetailPage({ params, searchParams }) {
  const articleId = params.id;
  const viewMode = searchParams.mode || 'default';

  const article = await fetchArticleDetail(articleId, viewMode);

  return <div>文章ID:{articleId} | 查看模式:{viewMode}</div>;
}

子级Server Component

子级Server Component无法直接获取searchParams,需要从父页面组件将所需参数传递进去:

// app/articles/components/ArticleList.js
export default async function ArticleList({ page, category }) {
  const articles = await fetchArticles(page, category);
  return (
    <ul>
      {articles.map(item => (
        <li key={item.id}>{item.title}</li>
      ))}
    </ul>
  );
}

// 在页面组件中调用子组件
export default async function ArticlesPage({ searchParams }) {
  const page = searchParams.page || '1';
  const category = searchParams.category || 'all';

  return (
    <div>
      <h2>分类:{category} | 第{page}页</h2>
      <ArticleList page={page} category={category} />
    </div>
  );
}

注意:useSearchParams是客户端组件专属Hook,Server Component不可使用,必须通过上述参数传递的方式获取查询参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:55:20