yggjs_rlayout框架v0.1.2使用教程 02 TechLayout 布局组件

简介

TechLayout 是整个科技风组件库的核心布局组件,它提供了一个完整的应用程序布局解决方案,包括:

  • 顶部导航栏
  • 可折叠侧边栏
  • 主要内容区域
  • 响应式设计

基础使用

最简单的使用

tsx 复制代码
import { TechLayout } from 'yggjs_rlayout/tech';

function App() {
  const menuItems = [
    { key: 'home', label: '首页', icon: 'home' },
    { key: 'users', label: '用户', icon: 'users' },
  ];

  return (
    <TechLayout
      brand="我的应用"
      sidebarItems={menuItems}
    >
      <div>页面内容</div>
    </TechLayout>
  );
}

完整示例

带所有功能的布局

tsx 复制代码
import { TechLayout } from 'yggjs_rlayout/tech';
import { useState } from 'react';

function App() {
  const [selectedKey, setSelectedKey] = useState('dashboard');
  
  // 侧边栏菜单数据
  const sidebarItems = [
    { key: 'dashboard', label: '仪表板', icon: 'dashboard' },
    { 
      key: 'users', 
      label: '用户管理', 
      icon: 'users',
      children: [
        { key: 'user-list', label: '用户列表' },
        { key: 'user-roles', label: '角色管理' },
      ]
    },
    { key: 'settings', label: '设置', icon: 'settings' },
  ];
  
  // 顶部导航菜单(可选)
  const headerMenuItems = [
    { key: 'workspace1', label: '工作区 1' },
    { key: 'workspace2', label: '工作区 2' },
  ];

  return (
    <TechLayout
      // 品牌信息
      brand="管理后台"
      version="v1.0.0"
      
      // 顶部导航
      headerMenuItems={headerMenuItems}
      selectedHeaderKey="workspace1"
      onHeaderMenuSelect={(key) => console.log('切换工作区:', key)}
      
      // 侧边栏
      sidebarItems={sidebarItems}
      selectedSidebarKey={selectedKey}
      onSidebarSelect={setSelectedKey}
      
      // 搜索功能
      onSearch={(value) => console.log('搜索:', value)}
      searchPlaceholder="搜索功能..."
      
      // 顶部右侧操作区
      headerActions={
        <div>
          <button>通知</button>
          <button>用户中心</button>
        </div>
      }
      
      // 布局配置
      defaultCollapsed={false}
      sidebarWidth={260}
      collapsedWidth={72}
    >
      {/* 这里是你的页面内容 */}
      <div>
        <h1>当前页面: {selectedKey}</h1>
        <p>页面内容会在这里显示</p>
      </div>
    </TechLayout>
  );
}

属性详解

基础属性

属性 类型 默认值 说明
children ReactNode - 主要内容区域
brand ReactNode - 品牌信息,显示在左上角
version string - 版本号,显示在品牌旁边

顶部导航属性

属性 类型 默认值 说明
headerMenuItems TechMenuItem[] - 顶部导航菜单项
selectedHeaderKey string - 当前选中的顶部菜单
onHeaderMenuSelect (key: string) => void - 顶部菜单选择回调
headerActions ReactNode - 顶部右侧操作区内容
headerExtra ReactNode - 顶部额外内容

侧边栏属性

属性 类型 默认值 说明
sidebarItems TechMenuItem[] 必填 侧边栏菜单项
selectedSidebarKey string - 当前选中的侧边栏菜单
onSidebarSelect (key: string) => void - 侧边栏菜单选择回调

搜索功能

属性 类型 默认值 说明
onSearch (value: string) => void - 搜索回调函数
searchPlaceholder string "搜索..." 搜索框占位符

布局配置

属性 类型 默认值 说明
defaultCollapsed boolean false 侧边栏默认是否折叠
sidebarWidth number 240 侧边栏展开时的宽度
collapsedWidth number 72 侧边栏折叠时的宽度
headerHeight number 56 顶部导航栏高度

内容区域配置

属性 类型 默认值 说明
contentMaxWidth number 1280 内容区域最大宽度
contentPadding number 16 内容区域内边距
enableGlobalStyles boolean true 是否启用全局样式
enableScrollbarStyling boolean true 是否启用滚动条样式

菜单项数据格式

基础菜单项

tsx 复制代码
const menuItems = [
  {
    key: 'dashboard',        // 唯一标识
    label: '仪表板',          // 显示文本
    icon: 'dashboard',       // 图标名称(可选)
  },
];

带子菜单的菜单项

tsx 复制代码
const menuItems = [
  {
    key: 'users',
    label: '用户管理',
    icon: 'users',
    children: [              // 子菜单
      { key: 'user-list', label: '用户列表' },
      { key: 'user-roles', label: '角色管理' },
    ],
  },
];

响应式设计

TechLayout 会自动适配不同屏幕尺寸:

  • 桌面端:正常显示所有元素
  • 平板端:侧边栏自动折叠
  • 手机端:侧边栏变为抽屉式

路由集成

如果你使用 React Router,可以这样集成:

tsx 复制代码
import { TechLayout } from 'yggjs_rlayout/tech';
import { useNavigate, useLocation } from 'react-router-dom';

function AppLayout({ children }) {
  const navigate = useNavigate();
  const location = useLocation();
  
  const menuItems = [
    { key: '/dashboard', label: '仪表板', icon: 'dashboard' },
    { key: '/users', label: '用户', icon: 'users' },
  ];

  return (
    <TechLayout
      brand="我的应用"
      sidebarItems={menuItems}
      selectedSidebarKey={location.pathname}
      onSidebarSelect={(key) => navigate(key)}
    >
      {children}
    </TechLayout>
  );
}

常见问题

1. 如何隐藏顶部导航?

不传入 headerMenuItems 即可隐藏顶部菜单栏。

2. 如何自定义侧边栏宽度?

使用 sidebarWidthcollapsedWidth 属性:

tsx 复制代码
<TechLayout
  sidebarWidth={300}       // 展开宽度
  collapsedWidth={60}      // 折叠宽度
  // ...其他属性
>

3. 如何处理菜单点击事件?

使用 onSidebarSelect 回调:

tsx 复制代码
<TechLayout
  onSidebarSelect={(key) => {
    console.log('选中菜单:', key);
    // 这里可以处理路由跳转、状态更新等逻辑
  }}
  // ...其他属性
>

4. 如何设置默认折叠侧边栏?

tsx 复制代码
<TechLayout
  defaultCollapsed={true}
  // ...其他属性
>
相关推荐
kyriewen6 小时前
AI 写的 React 组件,合并前必查的 6 个坏味道——每个都有代码对比
前端·javascript·react.js
光影少年10 小时前
RN适配方案:屏幕适配、分辨率适配、刘海屏/全面屏适配
react native·react.js·掘金·金石计划
Charonmomo12 小时前
react/antd - 不能正确打开标签页问题记录
前端·react.js·前端框架
用户6000718191012 小时前
【翻译】React Compiler 详解---memo
react.js
爱分享的程序猿-Clark13 小时前
【前端开发】前端开发者如何使用 Claude Code 快速搭建 React 项目!(小白都能学会的教程)
前端·react.js
大尚来也15 小时前
React Hooks全解析:告别繁琐Class组件
前端·react.js·前端框架
allnlei17 小时前
React + FastAPI 前后端分离架构下的 Nginx 配置实践
react.js·架构·fastapi
LaughingZhu17 小时前
Product Hunt 每日热榜 | 2026-07-15
前端·人工智能·神经网络·react.js·搜索引擎·前端框架
光影少年18 小时前
RN中的StyleSheet.create 好处、内联样式弊端
react native·react.js·掘金·金石计划
我是大卫18 小时前
【图】React源码解析-第六部分:高级算法与执行链路
react.js·源码