React带[]号的

半兽人 发表于: 2025-03-20   最后更新时间: 2025-03-20 10:28:07  
{{totalSubscript}} 订阅, 42 游览

/[appId]/layout.tsx 中的 [appId] 代表 动态路由(Dynamic Route Segment),用于匹配 URL 中的变量部分。在 Next.js 13+ App Router 里,它的作用类似于 占位符,用于创建动态路径。


1. [appId] 是什么?

在 Next.js App Routerapp/ 目录)中,[变量名] 代表动态路由,用于匹配 URL 中的动态部分。

示例:

假设你的 app/ 目录结构如下:

app/
├── [appId]/
│   ├── layout.tsx  // 作用于所有 /123 /456 这样的路径
│   ├── page.tsx    // 访问 /123 时渲染这个文件
│   ├── settings/
│   │   ├── page.tsx  // 访问 /123/settings

如果用户访问:

  • /123匹配 app/[appId]/page.tsxappId="123"
  • /456/settings匹配 app/[appId]/settings/page.tsxappId="456"

appId 的值由 URL 决定,可以在 page.tsxlayout.tsx 中通过 params 获取。


2. [appId]/layout.tsx 的作用

如果 layout.tsx[appId] 目录下,它会作用于所有 /[appId]/* 相关的页面,让这些页面共享相同的布局。

示例:app/[appId]/layout.tsx

export default function AppLayout({ children, params }: { children: React.ReactNode, params: { appId: string } }) {
  return (
    <div>
      <h1>当前 App ID: {params.appId}</h1>
      <main>{children}</main>
    </div>
  );
}

app/[appId]/page.tsx

export default function AppPage({ params }: { params: { appId: string } }) {
  return <h2>这是 App ID {params.appId} 的页面</h2>;
}

访问 /123 页面时:

<h1>当前 App ID: 123</h1>
<h2>这是 App ID 123 的页面</h2>

访问 /456/settings 页面时:

<h1>当前 App ID: 456</h1>
<h2>这是 App ID 456 的设置页面</h2>

layout.tsx 作用于所有 /[appId]/* 页面,让它们共享 App ID 相关的布局!


3. [appId](group) 的区别

特性 [appId] (group)
是否影响 URL ✅ 是,[appId] 代表 URL 变量 ❌ 否,(group) 只是文件组织
是否创建动态页面 ✅ 是,比如 /123, /456 ❌ 否,(commonLayout) 只是用于布局
是否能访问 params.appId ✅ 可以获取 ❌ 没有 params
适用于 需要基于 URL 变化的页面 仅仅是代码管理,URL 结构不变

4. 结论

  • [appId] 是动态路由,会匹配 /123/456 这样的路径,并让 params.appId 代表不同的 ID。
  • [appId]/layout.tsx/123/*/456/* 等页面共享相同的布局,比如显示 App ID
  • (group) 不同,[appId] 会影响 URL 结构,适用于需要基于参数切换页面的情况。

Next.js 这种 app/ 目录结构让动态路由+布局变得更强大!

更新于 2025-03-20

查看React更多相关的文章或提一个关于React的问题,也可以与我们一起分享文章