前端开发
用 Next.js 14+ App Router…
在构建或迁移到 Next.js 14+ App Router 时,按约定组织渲染模式、文件结构与数据获取方式。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 Next.js 14+ App Ro通用
解决思路
- 按渲染模式选择组件:Server Components 仅运行在服务端,用于数据获取、重计算和访问密钥;Client Components 运行在浏览器,用于交互、hooks 和浏览器 API;静态内容在构建时生成;个性化或实时数据在请求时生成;大页面或慢数据源使用流式渐进渲染。
- 遵循 app 目录文件约定:layout.tsx 为共享 UI 包装,page.tsx 为路由 UI,loading.tsx 为加载 UI(Suspense),error.tsx 为错误边界,not-found.tsx 为 404 UI,route.ts 为 API 端点,template.tsx 为重新挂载的 layout,default.tsx 为并行路由回退,opengraph-image.tsx 用于生成 OG 图片。
- 在 app/layout.tsx 中定义根布局:使用 next/font/google 加载字体(如 Inter({ subsets: ['latin'] })),导出 metadata(如 title 使用 { default, template } 形式),在 <html> 上设置 lang 并加 suppressHydrationWarning,在 <body> 上应用字体 className,并用 Providers 包裹 children。
- 默认使用 Server Component 编写页面:在 app/page.tsx 中直接写 async 函数组件,在组件内 await 数据获取函数,再把数据传给子组件渲染。
- 在 fetch 中配置缓存与再验证:使用 next: { revalidate: 3600 } 实现 ISR(每小时重新验证)。
- 从 Server Components 开始,只在需要交互时添加 'use client'。
- 把数据获取与使用它的组件放在一起(colocate data fetching)。
- 用 Suspense 边界包裹慢数据,以启用流式渲染。
- 使用并行路由获得相互独立的加载状态。
- 用 Server Actions 处理数据变更,以获得渐进增强能力。
- 不要向 Client Component 传递不可序列化的数据(注意 Server → Client 边界限制)。
- 不要在 Server Components 中使用 hooks(没有 useState、useEffect)。
- 不要在 Client Components 中直接获取数据,改用 Server Components 或 React Query。
- 不要过度嵌套 layout,每个 layout 都会增加组件树层级。
- 不要忽略加载状态,始终提供 loading.tsx 或 Suspense。
- 当上述导航层级不够用时,阅读 references/details.md 获取详细模式文档与完整示例。
适用边界 · 注意事项
- 不使用 Next.js 14+ App Router 的项目(如 Pages Router 或纯 React SPA)不适用。
- 不需要服务端渲染、流式渲染或 Server Components 的纯静态站点无需套用这些模式。