default.js 文件用于在 Next.js 无法在整页加载后恢复 slot 的 活跃状态时,在 并行路由 中渲染一个回退页面。
在 软导航 期间,Next.js 会跟踪每个 slot 的活跃状态(子页面)。然而,对于硬导航(整页加载),Next.js 无法恢复活跃状态。在这种情况下,default.js 文件可以用于渲染与当前 URL 不匹配的子页面。
考虑以下文件夹结构。@team slot 有一个 settings 页面,但 @analytics 没有。

当导航到 /settings 时,@team slot 将渲染 settings 页面,同时保持 @analytics slot 的当前活跃页面。
刷新时,Next.js 将为 @analytics 渲染一个 default.js。如果 default.js 不存在,则会为命名 slot(如 @team、@analytics 等)返回一个错误,并且要求你定义一个 default.js 才能继续。如果你希望在这些情况下保留返回 404 的旧行为,你可以创建一个包含以下内容的 default.js:
import { notFound } from "next/navigation";
export default function Default() {
notFound();
}此外,由于 children 是一个隐式 slot,当 Next.js 无法恢复父页面的活跃状态时,你还需要创建一个 default.js 文件来为 children 渲染一个回退。如果你不为 children slot 创建 default.js,它将为该路由返回一个 404 页面。
params (可选)一个 Promise,它解析为一个对象,该对象包含从根段到 slot 子页面的 动态路由参数。例如:
export default async function Default({
params,
}: {
params: Promise<{ artist: string }>;
}) {
const { artist } = await params;
}export default async function Default({ params }) {
const { artist } = await params;
}| Example | URL | params |
|---|---|---|
app/[artist]/@sidebar/default.js | /zack | Promise<{ artist: 'zack' }> |
app/[artist]/[album]/@sidebar/default.js | /zack/next | Promise<{ artist: 'zack', album: 'next' }> |
params 属性是一个 Promise。你必须使用 async/await 或 React 的 use 函数来访问这些值。
params 是一个同步属性。为了帮助向后兼容,在 Next.js 15 中你仍然可以同步访问它,但这种行为将在未来被弃用。