返回博客列表
框架教程
Next.js 14 App Router 最佳实践
2025-09-18
8 分钟阅读
Next.jsReact全栈

Next.js 14 App Router 最佳实践
Next.js 14 的 App Router 是一个革命性的路由系统,它基于 React Server Components 构建,为现代 Web 应用提供了更强大的功能和更好的性能。
什么是 App Router?
App Router 是 Next.js 13+ 引入的新路由系统,它使用文件系统路由,但提供了更强大的功能:
- 服务器组件:默认在服务器端渲染,减少客户端 JavaScript
- 嵌套布局:支持复杂的布局结构
- 流式渲染:提供更好的用户体验
- 数据获取:更灵活的数据获取方式
项目结构设计
推荐的目录结构
app/
├── layout.tsx # 根布局
├── page.tsx # 首页
├── loading.tsx # 全局加载组件
├── error.tsx # 全局错误组件
├── not-found.tsx # 404 页面
├── blog/
│ ├── layout.tsx # 博客布局
│ ├── page.tsx # 博客列表
│ └── [id]/
│ └── page.tsx # 博客详情
└── about/
└── page.tsx # 关于页面
数据获取策略
服务器组件数据获取
// app/blog/page.tsx
async function getBlogPosts() {
const res = await fetch('https://api.example.com/posts', {
next: { revalidate: 3600 } // 缓存1小时
})
if (!res.ok) {
throw new Error('Failed to fetch posts')
}
return res.json()
}
export default async function BlogPage() {
const posts = await getBlogPosts()
return (
<div>
{posts.map(post => (
<BlogCard key={post.id} post={post} />
))}
</div>
)
}
缓存优化
静态生成
// 生成静态页面
export async function generateStaticParams() {
const posts = await getBlogPosts()
return posts.map((post) => ({
id: post.id.toString(),
}))
}
// 静态生成配置
export const revalidate = 3600 // 1小时重新验证
性能优化技巧
代码分割
import dynamic from 'next/dynamic'
// 动态导入组件
const HeavyComponent = dynamic(() => import('./HeavyComponent'), {
loading: () => <p>Loading...</p>,
ssr: false // 禁用服务端渲染
})
图片优化
import Image from 'next/image'
export default function BlogPost({ post }) {
return (
<div>
<Image
src={post.image}
alt={post.title}
width={800}
height={400}
priority // 关键图片优先加载
/>
</div>
)
}
总结
Next.js 14 App Router 提供了强大的功能来构建现代 Web 应用。通过合理使用服务器组件、布局系统、数据获取策略和缓存优化,我们可以创建高性能、可维护的应用程序。
关键要点:
- 充分利用服务器组件的优势
- 合理设计布局层次结构
- 选择合适的缓存策略
- 实现完善的错误处理
- 持续优化性能