mcpField
S
syncfusion-react-dashboard-layout

syncfusion-react-dashboard-layout

github.com/syncfusion设计与 UI3717 次安装1 周前更新
代码仓库

关于 syncfusion-react-dashboard-layout

syncfusion-react-dashboard-layout 是介绍 Syncfusion React 仪表板布局组件的技能,面向构建交互式仪表板界面的开发者。它通过网格面板支持拖动、调整大小、响应式排列和布局状态管理。

主要功能

  1. 01使用网格组织仪表板面板
  2. 02拖动面板并调整尺寸
  3. 03自动填补布局空隙
  4. 04配置响应式布局与尺寸约束
  5. 05动态增删和更新面板
  6. 06序列化及恢复布局状态

适用场景

  1. 01构建可自定义的仪表板
  2. 02保存并恢复用户面板布局
  3. 03创建适配移动设备的界面
  4. 04在面板中排列图表和表格

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/react-ui-components-skills --skill syncfusion-react-dashboard-layout

安装后在 Claude Code 中输入/syncfusion-react-dashboard-layout确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
accessibility-wcag.md
advanced-features.md
cell-configuration.md
core-functionality.md
dragging-behavior.md
events-reference.md
getting-started.md
methods-reference.md
panel-templates.md
properties-reference.md
resizing-floating.md
responsive-design.md
state-persistence.md
styling-customization.md

详细介绍

实现 Syncfusion React Dashboard Layout

Syncfusion React Dashboard Layout 是一个功能强大的组件,可用于构建响应式、交互式仪表板界面,其中包含可拖动和调整大小的面板。它提供灵活的网格系统来组织内容、自动浮动排列以及全面的状态管理。

主要功能:

  • 多列网格布局,支持灵活设置单元格大小
  • 拖放面板以调整位置
  • 可调整大小的面板,并支持尺寸限制
  • 自动浮动排列(填充空白区域)
  • 通过媒体查询实现响应式设计
  • 动态添加、移除和更新面板
  • 跨会话持久化状态
  • 全面的事件系统,可监控更改
  • 支持无障碍功能和 RTL 渲染

文档与导航指南

请选择与当前任务相匹配的参考文档:

🚀 入门

📄 阅读: references/getting-started.md

  • 安装和软件包设置
  • CSS 主题导入和配置
  • 创建第一个仪表板
  • 基本面板实现
  • 常见设置问题及解决方案
🎯 核心概念

📄 阅读: references/core-functionality.md

  • 面板创建和配置(PanelModel 接口)
  • 基本拖动和定位
  • 带限制的基本调整大小
  • 网格配置基础
  • 完整的组件概览

📄 阅读: references/properties-reference.md

  • 文档涵盖全部 15 个组件属性
  • 布局属性(columns、cellSpacing、cellAspectRatio)
  • 自定义选项(enableRtl、enablePersistence、showGridLines)
  • 高级属性(mediaQuery、draggableHandle、resizableHandles)
  • 完整的属性参考及使用模式
🎨 用户界面与自定义

📄 阅读: references/panel-templates.md

  • 面板结构和组成
  • 标题模板(文本、HTML、交互式)
  • 内容模板(HTML 字符串、JSX、Syncfusion 组件)
  • 嵌入图表、网格和小组件
  • 动态内容更新
  • 模板最佳实践和优化

📄 阅读: references/styling-customization.md

  • 完整的 CSS 选择器参考
  • 主题系统集成(Tailwind、Bootstrap、Material、Fluent)
  • 标题和内容区域样式
  • 调整大小控点的样式和自定义
  • 面板背景、边框和渐变
  • 拖动和交互状态样式
  • 高级自定义模式
🎮 交互与行为

📄 阅读: references/dragging-behavior.md

  • 启用并配置拖动功能
  • 拖动事件(dragStart、drag、dragStop)
  • 碰撞检测和面板推移
  • 自定义拖动控点(仅标题栏、仅图标、多个)
  • 禁止拖动特定面板
  • 视觉反馈和占位符样式
  • 以编程方式移动面板
  • 撤销/重做实现

📄 阅读: references/resizing-floating.md

  • 启用并配置调整大小功能
  • 调整大小控点方向(SE、E、W、N、S、NW、NE、SW)
  • 尺寸限制(minSizeX、minSizeY、maxSizeX、maxSizeY)
  • 调整大小事件(resizeStart、resize、resizeStop)
  • 浮动行为和空隙填充
  • 以编程方式调整大小(resizePanel 方法)
  • 响应式调整大小和纵横比维护
  • 调整大小的最佳实践
⚙️ 配置与布局

📄 阅读: references/cell-configuration.md

  • 网格列与单元格分布
  • 单元格尺寸基础(sizeX、sizeY)
  • 单元格宽高比配置
  • 单元格间距管理
  • 单元格计算示例
  • 响应式单元格配置
  • 瀑布流、主视觉和嵌套网格模式

📄 阅读: references/responsive-design.md

  • 内置响应式行为
  • 媒体查询配置和自定义断点
  • 标准断点系统
  • 适配不同屏幕尺寸的布局
  • 移动优先方法
  • 触控设备支持与优化
  • 响应式布局测试
  • 响应性能优化
💾 高级功能

📄 阅读: references/state-persistence.md

  • 用于保存布局的 serialize 方法
  • 保存/恢复状态模式
  • localStorage 集成
  • sessionStorage 集成
  • 数据库 API 集成
  • 高级状态管理(Redux、Context API)
  • 版本控制与迁移
  • 错误恢复与备份

📄 阅读: references/methods-reference.md

  • 记录全部 9 个组件方法
  • 面板管理:addPanel、removePanel、removeAll、updatePanel
  • 布局操作:movePanel、resizePanel
  • 序列化:serialize 方法
  • 实用方法:refreshDraggableHandle、destroy
  • 完整的方法示例和用例

📄 阅读: references/events-reference.md

  • 记录全部 10 个组件事件
  • 生命周期事件:created、destroyed
  • 交互事件:dragStart、drag、dragStop、resizeStart、resize、resizeStop
  • 变更事件:监控面板的添加、移除和位置变更
  • 事件参数与属性
  • 完整的事件处理模式
♿ 合规性与无障碍访问

📄 阅读: references/accessibility-wcag.md

  • 符合 WCAG 2.2 AA 级标准
  • 符合 Section 508 标准
  • WAI-ARIA 实现(角色、属性、状态)
  • 键盘导航与无障碍访问
  • 屏幕阅读器支持
  • RTL(从右向左)语言支持
  • 测试与验证流程
  • 无障碍审查清单

快速入门示例

几分钟内创建一个交互式仪表板:

import React, { useRef } from 'react';
import { DashboardLayoutComponent } from '@syncfusion/ej2-react-layouts';
import '@syncfusion/ej2-base/styles/tailwind3.css';
import '@syncfusion/ej2-react-layouts/styles/tailwind3.css';

function Dashboard() {
  const dashboardRef = useRef<DashboardLayoutComponent>(null);

  const panels = [
    {
      id: 'sales',
      header: 'Sales',
      content: '<div style="padding: 20px;">Sales data</div>',
      row: 0,
      col: 0,
      sizeX: 2,
      sizeY: 2
    },
    {
      id: 'users',
      header: 'Users',
      content: '<div style="padding: 20px;">User analytics</div>',
      row: 0,
      col: 2,
      sizeX: 2,
      sizeY: 2
    },
    {
      id: 'reports',
      header: 'Reports',
      content: '<div style="padding: 20px;">Report metrics</div>',
      row: 2,
      col: 0,
      sizeX: 4,
      sizeY: 1
    }
  ];

  return (
    <div style={{ padding: '20px' }}>
      <h1>Dashboard</h1>
      <DashboardLayoutComponent
        ref={dashboardRef}
        id='dashboard'
        columns={5}
        cellSpacing={[10, 10]}
        panels={panels}
        allowDragging={true}
        allowResizing={true}
        allowFloating={true}
        enablePersistence={true}
      >
      </DashboardLayoutComponent>
    </div>
  );
}

export default Dashboard;

常见模式

模式 1:支持移动设备的响应式仪表板

📖 阅读: responsive-design.md,了解全面的移动适配模式

<DashboardLayoutComponent
  id='responsive-dashboard'
  columns={5}
  mediaQuery='max-width:768px'  // Single column on tablets/mobile
  cellSpacing={[10, 10]}
  allowDragging={true}
  allowResizing={true}
  panels={panels}
>
</DashboardLayoutComponent>

主要特性:

  • 根据屏幕尺寸调整响应式列数
  • 采用媒体查询的移动优先设计
  • 针对移动设备进行触控优化
  • 断点配置与测试请参见 responsive-design.md
模式 2:保存和恢复用户布局

📖 阅读: state-persistence.md,了解完整的状态序列化与存储选项

const handleSaveLayout = () => {
  const layout = dashboardRef.current?.serialize();
  localStorage.setItem('userDashboard', JSON.stringify(layout));
};

const handleRestoreLayout = () => {
  const saved = localStorage.getItem('userDashboard');
  if (saved) {
    const layout = JSON.parse(saved);
    dashboardRef.current?.removeAll();
    layout.forEach(panel => {
      dashboardRef.current?.addPanel(panel);
    });
  }
};

主要特性:

  • serialize() 方法导出当前布局状态
  • 使用 localStorage 在客户端持久化数据
  • API 集成、Redux/Context 模式和自动保存请参见 state-persistence.md
模式 3:动态面板管理

📖 阅读: core-functionality.md,了解面板的添加/移除与运行时管理

const handleAddPanel = () => {
  dashboardRef.current?.addPanel({
    id: `panel-${Date.now()}`,
    header: 'New Panel',
    content: 'Panel content',
    row: 0,
    col: 0,
    sizeX: 2,
    sizeY: 1
  });
};

const handleRemovePanel = (panelId: string) => {
  dashboardRef.current?.removePanel(panelId);
};

主要特性:

  • 在运行时创建和删除面板
  • 唯一面板 ID 与位置
  • 面板变更事件处理
  • 所有可用面板方法请参见 methods-reference.md
模式 4:限制面板尺寸

📖 阅读: cell-configuration.md 和 resizing-floating.md,了解尺寸限制和调整大小行为

const constrainedPanels = [
  {
    id: 'fixed-panel',
    header: 'Fixed Size',
    row: 0,
    col: 0,
    sizeX: 2,
    sizeY: 1,
    minSizeX: 2,  // Cannot shrink
    maxSizeX: 2,  // Cannot expand
    minSizeY: 1,
    maxSizeY: 1
  },
  {
    id: 'flexible-panel',
    header: 'Flexible',
    row: 0,
    col: 2,
    sizeX: 2,
    sizeY: 1,
    minSizeX: 1,  // Can shrink to 1 cell
    maxSizeX: 4   // Can expand to 4 cells
  }
];

主要特性:

  • minSizeX/Y 和 maxSizeX/Y 限制
  • 固定或灵活的面板尺寸
  • 通过 resizePanel() 以编程方式更新尺寸
  • 网格计算请参见 cell-configuration.md,高级调整大小模式请参见 resizing-floating.md
模式 5:监控布局变化

📖 阅读: events-reference.md,了解所有可用事件和处理程序

const handleChange = (args: ChangeEventArgs) => {
  console.log('Panels added:', args.addedPanels);
  console.log('Panels removed:', args.removedPanels);
  console.log('Panels position changed:', args.changedPanels);
  console.log('User interaction:', args.isInteracted);
};

<DashboardLayoutComponent
  panels={panels}
  change={handleChange}
>
</DashboardLayoutComponent>

主要功能:

  • 任何布局修改都会触发 change 事件
  • 可访问已添加、已移除和已重新定位的面板
  • 检测用户交互
  • 拖动、调整大小及其他事件处理程序请参阅 events-reference.md

主要 API 概览

组件属性

📖 完整参考: properties-reference.md

  • columns - 网格列数(默认值:1)→ 参阅 cell-configuration.md
  • cellSpacing - 面板间距 [水平,垂直] → 参阅 cell-configuration.md
  • panels - 定义布局的 PanelModel 对象数组 → 参阅 panel-templates.md
  • allowDragging - 启用面板拖放(默认值:true)→ 参阅 dragging-behavior.md
  • allowResizing - 启用面板大小调整(默认值:false)→ 参阅 resizing-floating.md
  • allowFloating - 自动填充空白区域(默认值:true)→ 参阅 resizing-floating.md
  • enablePersistence - 保存布局状态(默认值:false)→ 参阅 state-persistence.md
  • mediaQuery - 移动端布局的响应式断点 → 参阅 responsive-design.md
  • draggableHandle - 自定义拖动手柄选择器 → 参阅 dragging-behavior.md
  • resizableHandles - 调整大小手柄的方向 → 参阅 resizing-floating.md
  • cssClass - 自定义 CSS 类 → 参阅 styling-customization.md
核心方法

📖 完整参考: methods-reference.md

  • addPanel(panel) - 在运行时添加新面板 → 参阅 core-functionality.md
  • removePanel(id) - 按 ID 移除面板 → 参阅 core-functionality.md
  • removeAll() - 清除所有面板 → 参阅 core-functionality.md
  • updatePanel(panel) - 修改现有面板 → 参阅 core-functionality.md
  • movePanel(id, row, col) - 更改面板位置 → 参阅 dragging-behavior.md
  • resizePanel(id, sizeX, sizeY) - 调整面板尺寸 → 参阅 resizing-floating.md
  • serialize() - 获取当前布局状态 → 参阅 state-persistence.md
重要事件

📖 完整参考: events-reference.md

  • created - 组件已初始化
  • dragStart / drag / dragStop - 拖动操作 → 参阅 dragging-behavior.md
  • resizeStart / resize / resizeStop - 调整大小操作 → 参阅 resizing-floating.md
  • change - 布局已更改(添加、移除、移动)→ 参阅 events-reference.md
样式与自定义

📖 完整参考: styling-customization.md

  • 所有面板元素的 CSS 选择器
  • 主题自定义(Tailwind、Bootstrap、Material、Fluent)
  • 响应式样式模式
  • 无障碍样式(WCAG 2.2)

常见用例

🎯 创建仪表板: 实现可自定义的仪表板布局,将多个内容面板排列在网格中。

🎯 用户自定义布局: 允许用户按偏好重新排列和调整仪表板面板大小,并自动保存。

🎯 响应式界面: 构建能够从多列桌面视图适配到单列移动视图的布局。

🎯 实时监控: 在可调整大小的面板中显示多个实时数据源,并实时更新。

🎯 管理面板: 创建包含可拖动小部件的管理界面,用于系统监控和控制。

🎯 数据可视化: 在灵活的响应式面板布局中排列多个图表、表格和指标。

面板模型接口

interface PanelModel {
  id: string;              // Unique identifier (required)
  row: number;             // Row position (required)
  col: number;             // Column position (required)
  sizeX: number;           // Width in cells (default: 1)
  sizeY: number;           // Height in cells (default: 1)
  header?: string | HTMLElement | Function;
  content?: string | HTMLElement | Function;
  cssClass?: string;       // Custom CSS classes
  enabled?: boolean;       // Enable/disable (default: true)
  minSizeX?: number;       // Minimum width (default: 1)
  minSizeY?: number;       // Minimum height (default: 1)
  maxSizeX?: number;       // Maximum width
  maxSizeY?: number;       // Maximum height
  zIndex?: number;         // Stacking order
}

快速参考指南

任务阅读此文档
快速开始getting-started.md - 安装、设置、主题
了解面板管理core-functionality.md - 创建、更新、移除面板
自定义面板内容panel-templates.md - 标题、模板、嵌入组件
启用拖动dragging-behavior.md - 拖动事件、碰撞、自定义手柄
启用调整大小resizing-floating.md - 调整大小手柄、限制、浮动
配置网格系统cell-configuration.md - 列、间距、纵横比、响应式网格
实现响应式布局responsive-design.md - 断点、移动端、触控优化
保存用户布局state-persistence.md - serialize()、localStorage、API、Redux、Context
样式与主题styling-customization.md - CSS 选择器、主题、响应式样式
实现无障碍访问accessibility-wcag.md - WCAG 2.2、WAI-ARIA、屏幕阅读器、RTL
API 参考properties-reference.md、methods-reference.md、events-reference.md
高级模式advanced-features.md - 自定义集成、性能优化

实现路线图

阶段 1 - 基础(从这里开始):

  1. 阅读 getting-started.md 了解设置
  2. 查看 core-functionality.md 了解面板基础知识
  3. 查看 properties-reference.md 了解所有可用选项

阶段 2 - 交互(构建功能): 4. 实现拖动:dragging-behavior.md 5. 实现调整大小:resizing-floating.md 6. 配置网格:cell-configuration.md

阶段 3 - 内容(自定义外观): 7. 创建面板模板:panel-templates.md 8. 应用样式:styling-customization.md

阶段 4 - 完善(为生产环境做好准备): 9. 针对移动设备进行优化:responsive-design.md 10. 添加无障碍支持:accessibility-wcag.md 11. 实现持久化:state-persistence.md

阶段 5 - 高级(专家功能): 12. 探索模式:advanced-features.md 13. 参考事件/方法 API:events-reference.md、methods-reference.md

评论

支持 Markdown