关于 syncfusion-react-dashboard-layout
syncfusion-react-dashboard-layout 是介绍 Syncfusion React 仪表板布局组件的技能,面向构建交互式仪表板界面的开发者。它通过网格面板支持拖动、调整大小、响应式排列和布局状态管理。
主要功能
- 01使用网格组织仪表板面板
- 02拖动面板并调整尺寸
- 03自动填补布局空隙
- 04配置响应式布局与尺寸约束
- 05动态增删和更新面板
- 06序列化及恢复布局状态
适用场景
- 01构建可自定义的仪表板
- 02保存并恢复用户面板布局
- 03创建适配移动设备的界面
- 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.mdadvanced-features.mdcell-configuration.mdcore-functionality.mddragging-behavior.mdevents-reference.mdgetting-started.mdmethods-reference.mdpanel-templates.mdproperties-reference.mdresizing-floating.mdresponsive-design.mdstate-persistence.mdstyling-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)
常见用例
🎯 创建仪表板: 实现可自定义的仪表板布局,将多个内容面板排列在网格中。
🎯 用户自定义布局: 允许用户按偏好重新排列和调整仪表板面板大小,并自动保存。
🎯 响应式界面: 构建能够从多列桌面视图适配到单列移动视图的布局。
🎯 实时监控: 在可调整大小的面板中显示多个实时数据源,并实时更新。
- 阅读:panel-templates.md(嵌入组件)、events-reference.md
🎯 管理面板: 创建包含可拖动小部件的管理界面,用于系统监控和控制。
🎯 数据可视化: 在灵活的响应式面板布局中排列多个图表、表格和指标。
- 阅读:panel-templates.md(嵌入图表/网格)、styling-customization.md
面板模型接口
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 - 基础(从这里开始):
- 阅读 getting-started.md 了解设置
- 查看 core-functionality.md 了解面板基础知识
- 查看 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