← 返回主页
Next.js2025-01-10

深入理解 Next.js App Router 路由机制

# 深入理解 Next.js App Router 路由机制 Next.js 13 引入的 App Router 是对 React 服务端组件(RSC)的全面拥抱,它改变了我们构建 Next.js 应用的方式。本文将深入探讨 App Router 的核心概念、文件约定以及它如何优化应用性能。 ## 核心概念 ### Server Components vs Client Components 在 App Router 中,默认情况下所有组件都是 **Server Components**。这意味着它们在服务器上渲染,生成的 HTML 发送到客户端。这大大减少了发送到客户端的 JavaScript 包大小。 如果你需要使用 React 的 Hooks(如 `useState`, `useEffect`)或浏览器事件监听器,你需要在文件顶部添加 `"use client"` 指令,将其标记为 **Client Component**。 ### 路由段(Route Segments) App Router 使用文件系统作为路由。文件夹定义路由段。 - `app/page.tsx`: 根路由 `/` - `app/dashboard/page.tsx`: `/dashboard` - `app/blog/[slug]/page.tsx`: 动态路由 `/blog/:slug` ## 特殊文件约定 Next.js 提供了一系列特殊文件来处理 UI 的不同状态: - `layout.tsx`: 共享 UI,跨路由保持状态。 - `template.tsx`: 类似于 layout,但在导航时会重新挂载。 - `loading.tsx`: React Suspense 的 fallback UI,处理加载状态。 - `error.tsx`: 错误边界,处理运行时错误。 - `not-found.tsx`: 处理 404 错误。 ## 性能优化 App Router 带来了自动的代码分割和预取(Prefetching)。 当使用 `<Link>` 组件时,Next.js 会自动预取视口内的路由。对于静态路由,它会预取整个路由数据;对于动态路由,它会预取布局段。 ## 总结 App Router 是 Next.js 的未来。虽然思维模式的转变需要时间适应,但它带来的性能提升和开发体验改进是值得的。