Nextjs中的app目录和pages目录有何区别?

2,624 阅读2分钟

在 Next.js 13 中,引入了新的 app 目录概念,此目录至于传统的 pages 目录有着不同的作用和概念。下面是二者之间的一些主要区别:

pages 目录:

  • 文件系统路由pages 目录一直以来是 Next.js 中基于文件的路由系统的核心。每个文件都与一个路由自动对应起来。
  • 固定布局: 在 pages 目录中,布局通常是通过每个页面组件或通过 _app.js 文件来共享的,并没有内建的方式来支持嵌套布局。
  • 数据获取: 页面组件可以导出 getStaticProps 和 getServerSideProps 函数,用于在构建时或每次请求时进行数据获取。

app 目录:

  • 文件系统路由app 目录保留了这种路由方式,但增加了对嵌套路由和布局的支持。
  • 嵌套布局app 目录内,可以通过文件结构来直接定义嵌套布局,让开发者能够为某个子路由或者整个应用定义布局组件。
  • page 组件app 目录引入了 page 组件概念,这些组件可以定义它们自己的数据获取需求,并且能够在布局中嵌套。
  • 增强的数据获取app 目录允许使用新的 fetch 函数直接在组件中定义数据获取,以SSR的方式将数据发送到客户端。

是否可以同时存在?

在 Next.js 13 中,你可以在同一个项目中同时使用 pages 和 app 目录。但是,按照官方文档,推荐是逐步迁移到 app 目录以利用其提供的新特性和优化:

  • 如果你创建了一个 app 目录,Next.js 将会优先使用 app 目录中的路由和逻辑。
  • 如果某个路由在 app 目录没有对应的页面,Next.js 将回退到 pages 目录查找。

使用 pages 和 app 目录的最佳实践是将它们视为不同的应用模式,如果你正在构建一个新的项目,使用 app 目录能够让你充分利用 Next.js 的最新特性。如果你正在维护一个现有项目,则可以逐步迁移到 app 目录以增强你的应用。

随着 Next.js 的进化,官方文档和最佳实践可能会更新,因此应密切关注 Next.js 的版本更新和相关文档。