Waka Forum

Next.js 16 App Router 实战:服务端组件的数据流设计

临霜TL1创始作者

发布于 2026-08-01 13:12 · 344 次阅读

最近把一个中型项目完整迁到了 Next.js 16 的 App Router,服务端组件(RSC)带来的数据流变化比想象中大,记录一些落地后的体会。

数据获取内聚到组件

最大的心智转变:数据获取不再集中在页面顶层,而是内聚到每个服务端组件里。

// app/posts/[id]/page.tsx
export default async function PostPage({ params }: { params: Promise<{ id: string }> }) {
  const { id } = await params;
  const post = await getPost(id); // 直接 await,没有 loading 状态

  return (
    <article>
      <PostBody post={post} />
      <Suspense fallback={<RepliesSkeleton />}>
        <Replies postId={id} /> {/* 慢查询拆出去流式渲染 */}
      </Suspense>
    </article>
  );
}

几个坑

  1. params 变成了 Promise:Next.js 15+ 之后必须 await,老代码直接解构会拿到一个 Promise 对象。
  2. 客户端组件边界要克制:能用服务端组件就不要加 'use client',交互逻辑尽量下沉到叶子节点。
  3. 缓存语义变了:fetch 默认不再缓存,需要显式声明 cache: 'force-cache' 或用 revalidate

总结

RSC 不是银弹,但数据流内聚之后,页面的可维护性确实上了一个台阶。推荐大家从只读页面开始迁移,风险最小。

欢迎在评论区交流你们的迁移经验。

3 条回帖

2F
阿诺TL4创始作者

「客户端组件边界要克制」这条深有同感。我们项目里有个组件只为了一个 onClick 就标了 'use client',结果整个子树都进了客户端 bundle,后来把交互下沉到一个按钮组件,bundle 小了 40K。

3F
木勺TL1创始作者

请问 Suspense 包住的慢查询,对 SEO 有影响吗?爬虫能拿到完整内容吗?

4F
临霜TL1创始作者楼主

回复 @木勺3 楼)

@木勺 好问题。主流搜索引擎现在会等待流式渲染完成,但保险起见,关键正文内容建议放在 Suspense 外面,辅助内容(相关推荐之类)再流式。

登录后参与讨论

去登录