Next.js 中的一些文件约定


前言

针对 app route 模式,记录一下。

路由文件

API Reference: File Conventions | Next.js

default

针对 Parallel route fallback page, 没有对应匹配的路由的兜底展示页面,如果不设置, 整体页面会显示 404, 一般返回 null 即可,如果不需要对应路由的匹配,连page.tsx 都不需要。项目示例:nextgram/app/@modal at main · vercel-labs/nextgram

@folder 的命名方式,是 solt 占位, 里面的目录命名,如果符合 (.), (..), (..)(..), (...) 开头的, 会自动匹配外层的路由展示,使得在页面内做 <Link /> 组件跳转的时候,优先使用 @folder 中的页面。

loading

suspense 的 loading 组件。

error

ErrorBoundary 组件。

global-error

layout 报错的替代的错误页面

not-found

404 页面, 但是内嵌子页面的话,默认都是走到了 app 下全局的 not-found, 如果需要自己判断的话, 比如某个 id 不存在,展示 404, 需要 import { notFound } from 'next/navigation'; 调用 notFound(), 才会跳转到当前目录下的 not-found. 配合国际化, 还需要注意, Next.js 如何在 i18n 场景下处理 404 页面

layout

布局, 可以使用 @folder 定义的目录,作为 props 传递。

page

具体的页面

route

具体的 API

template

it is rendered between a layout and its children.

layout 有点类似,但在页面切换的时候,状态会重置。尽管较为罕见,但如果您有需要的话,您可以选择使用模板而不是布局。 它的渲染在 layoutpage 之间,包裹了一层。

(folder)

这一层,逻辑上面的包裹,使得下面目录的路由,可以共享 layout, error, loading 等组件。

_folder

私有目录,不会被 next.js 处理。

Route Segment Config

File Conventions: Route Segment Config | Next.js

layout | page | route 有对应的默认值:

export const dynamic = 'auto'
export const dynamicParams = true
export const revalidate = false
export const fetchCache = 'auto'
export const runtime = 'nodejs'
export const preferredRegion = 'auto'
export const maxDuration = 5

export default function MyComponent() {}

技术总结