在 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 的版本更新和相关文档。