文档中心
探索 DWeb 框架的无限可能,构建下一代高性能 Web 应用
布局系统
DWeb 框架支持布局继承,允许你创建可复用的布局组件,并在多个页面之间共享。
布局继承
布局继承是 DWeb 框架的核心特性之一。通过创建 _layout.tsx 文件,你可以为特定路径下的所有页面提供统一的布局结构。
基本概念
布局文件使用 _layout.tsx 命名约定,放置在路由目录中。布局会自动应用到该目录及其所有子目录的页面。
布局文件结构
布局继承顺序
当访问 /docs/core/router 时,布局的嵌套顺序为:
routes/docs/_layout.tsx(最具体)routes/_layout.tsx(根布局)
布局组件会从最内层到最外层嵌套,最终结构为:
创建布局
基本布局示例
嵌套布局示例
禁用布局
DWeb 框架提供了两种禁用布局的方式:
1. 禁用布局继承(布局级别)
在某些情况下,你可能不希望某个布局继承父布局。例如,你可能希望文档页面使用完全独立的布局,而不继承根布局。
**使用 layout = false**
在布局文件中导出 export const layout = false 可以禁用布局继承:
继承行为说明
- 默认行为:布局会自动继承所有父级布局
layout = false(布局级别):设置后,该布局及其所有子页面将不再继承更上层的布局layout = false(页面级别):设置后,该页面将不使用任何布局,包括父级布局- 继承链中断:当遇到
layout = false的布局时,继承链会在此处停止
布局组件属性
布局组件接收一个 children 属性,包含子页面或子布局的内容:
使用 children
重要限制
⚠️ 布局组件不能是异步函数
**布局组件不能定义为 async function**。如果需要进行异步操作(如数据获取),请在组件内部使用 useEffect 钩子处理。
**❌ 错误示例**
**✅ 正确示例**
最佳实践
1. 保持布局简洁
布局应该只包含结构性的内容,业务逻辑应该放在页面组件中。
2. 合理使用布局继承
- 使用根布局提供全局结构(HTML、导航、页脚等)
- 使用子布局提供特定区域的布局(如文档侧边栏、管理后台菜单等)
- 在需要完全独立布局时使用
layout = false
3. 布局与页面分离
- 布局文件:
_layout.tsx- 提供结构 - 页面文件:
*.tsx- 提供内容
4. 响应式设计
在布局中使用响应式类(如 Tailwind CSS)确保在不同设备上正常显示:
常见问题
Q: 布局继承的顺序是什么?
A: 布局继承从最具体到最通用:
- 当前路径的布局(如
/docs/core的布局) - 父路径的布局(如
/docs的布局) - 根布局(
/的布局)
Q: 如何让某个页面不使用任何布局?
A: 在页面组件中导出 export const layout = false,该页面将不使用任何布局。
Q: `layout = false` 在布局文件中会影响子布局吗?
A: 是的。如果父布局设置了 layout = false,子布局也不会继承更上层的布局。
Q: 布局可以访问页面数据吗?
A: 布局组件只接收 children 属性,不能直接访问页面数据。如果需要共享数据,可以使用 Context 或其他状态管理方案。