关于 ag-grid
这是一项使用 AG Grid 构建 React 数据网格的技能,涵盖类型化列定义、编辑、筛选、无障碍和性能实践。适用于开发复杂表格界面的开发者,而非简单表格或非表格可视化。
主要功能
- 01配置排序、筛选和分页
- 02支持行内编辑与自定义单元格
- 03使用 TypeScript 列定义
- 04通过虚拟化提升性能
- 05遵循键盘和屏幕阅读器无障碍实践
适用场景
- 01构建可编辑数据网格
- 02为表格数据添加筛选和分页
- 03创建分组或聚合网格
- 04提升大型表格的渲染效率
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ joabgonzalez/ ai-agents-skills --skill ag-grid安装后在 Claude Code 中输入/ag-grid确认已加载。
详细介绍
AG Grid
支持排序、筛选、分页、行内编辑和类似 Excel 功能的 React 数据表格。提供 TypeScript 类型、安全的无障碍功能和虚拟化。
示例使用
ag-grid-react。列配置 API(ColDef、onGridReady)与框架无关——请根据 Angular/Vue 的组件语法调整单元格渲染器。
适用场景
- 需要排序、筛选和分页的数据表格
- 支持行内编辑的可编辑网格
- 支持分组/聚合的复杂网格
- 需要通过虚拟化实现高性能
- 类似 Excel 的功能
不适用于:
- 简单表格(使用 HTML/MUI Table)
- 非表格类可视化(使用图表)
- 移动端优先的场景(考虑更简单的方案)
关键模式
✅ 必须:使用 TypeScript 接口确保类型安全
// ✅ CORRECT: Typed column definitions
import { ColDef } from "ag-grid-community";
interface RowData {
id: number;
name: string;
}
const columnDefs: ColDef<RowData>[] = [{ field: "id" }, { field: "name" }];
// ❌ WRONG: Untyped columns
const columnDefs = [{ field: "id" }, { field: "name" }];
✅ 必须:使用 defaultColDef 设置通用选项
// ✅ CORRECT: DRY column configuration
const defaultColDef: ColDef = {
sortable: true,
filter: true,
resizable: true,
};
<AgGridReact defaultColDef={defaultColDef} />
// ❌ WRONG: Repeating config for each column
const columnDefs = [
{ field: 'id', sortable: true, filter: true, resizable: true },
{ field: 'name', sortable: true, filter: true, resizable: true },
];
✅ 必须:启用无障碍功能
// ✅ CORRECT: Accessibility enabled
<AgGridReact
enableAccessibility={true}
suppressMenuHide={false}
/>
约定
AG Grid 专用
- 为列定义 TypeScript 接口
- 使用单元格渲染器呈现自定义内容
- 遵循无障碍最佳实践:键盘导航、屏幕阅读器支持、ARIA 属性
- 优先使用内置功能,而非自定义实现
- 处理加载/错误状态
决策树
Custom cells?
→ Use cellRenderer/cellRendererFramework
Editable?
→ editable: true, handle onCellValueChanged
Filtering?
→ filter: true or specify type (agTextColumnFilter, agNumberColumnFilter)
Large dataset?
→ rowModelType: 'infinite' for server pagination
Grouping?
→ rowGroup: true on columns
Export?
→ exportDataAsCsv()/exportDataAsExcel()
Performance?
→ Virtualization (default), immutableData: true for React
示例
import { ColDef } from 'ag-grid-community';
import { AgGridReact } from 'ag-grid-react';
interface RowData {
id: number;
name: string;
value: number;
}
const columnDefs: ColDef<RowData>[] = [
{ field: 'id', headerName: 'ID' },
{ field: 'name', headerName: 'Name', sortable: true },
{ field: 'value', headerName: 'Value', filter: 'agNumberColumnFilter' }
];
<AgGridReact<RowData>
rowData={data}
columnDefs={columnDefs}
defaultColDef={{ flex: 1, minWidth: 100 }}
/>
边缘情况
- 数据为空 → 提供适当提示
- 获取数据时显示加载状态
- 发生故障时使用错误边界
- 正确处理调整大小事件
- 测试键盘导航
资源
评论
支持 Markdown