Группировка строк — одна из ключевых возможностей для построения
сложных иерархических таблиц и сеток данных в MUI. В библиотеке
@mui/x-data-grid реализован ряд инструментов для создания
визуально структурированных таблиц с объединением строк по определённым
критериям, что повышает читаемость и упрощает анализ данных.
1. Row Grouping В MUI термин row grouping обозначает объединение строк по значению одного или нескольких полей. Это позволяет формировать группы данных, где каждая группа отображает сводную информацию по выбранному ключу.
Пример конфигурации группировки:
import { DataGridPro } from '@mui/x-data-grid-pro';
const rows = [
{ id: 1, category: 'Фрукты', name: 'Яблоко', price: 120 },
{ id: 2, category: 'Фрукты', name: 'Банан', price: 80 },
{ id: 3, category: 'Овощи', name: 'Морковь', price: 50 },
];
const columns = [
{ field: 'category', headerName: 'Категория', width: 150 },
{ field: 'name', headerName: 'Название', width: 150 },
{ field: 'price', headerName: 'Цена', width: 100 },
];
<DataGridPro
rows={rows}
columns={columns}
rowGroupingModel={['category']}
/>
В этом примере строки будут сгруппированы по полю
category, создавая визуальные блоки “Фрукты” и “Овощи”.
2. groupDisplayType MUI позволяет изменять способ отображения групп:
singleColumn — все уровни группировки отображаются в
одной колонке.multipleColumns — каждая группа имеет отдельную
колонку, соответствующую уровню вложенности.<DataGridPro
rows={rows}
columns={columns}
rowGroupingModel={['category']}
groupingColDef={{ headerName: 'Группы', hideDescendantCount: false }}
groupDisplayType="singleColumn"
/>
hideDescendantCount управляет отображением количества
дочерних элементов в группе. Это особенно полезно для больших таблиц с
глубокой иерархией.
3. Aggregation Для групп строк можно отображать агрегированные значения, например сумму, среднее или минимальное значение. Это достигается с помощью valueGetter и aggregationFunctions.
import { GridAggregationFunction, GridAggregationModel } from '@mui/x-data-grid-pro';
const aggregationModel = {
price: 'sum',
};
<DataGridPro
rows={rows}
columns={columns}
rowGroupingModel={['category']}
aggregationModel={aggregationModel}
/>
Здесь для каждой группы по category будет отображена
сумма всех цен. MUI поддерживает предопределённые агрегатные функции:
sum, avg, min, max,
count, а также позволяет создавать кастомные функции.
4. CSS и слоты для кастомизации MUI предоставляет возможность изменять стиль групп с помощью slots и CSS-классов:
MuiDataGrid-groupingColumn — класс колонки с
группами.MuiDataGrid-groupCollapsed /
MuiDataGrid-groupExpanded — состояние свёрнутой/развёрнутой
группы.<DataGridPro
rows={rows}
columns={columns}
rowGroupingModel={['category']}
sx={{
'.MuiDataGrid-groupingColumn': {
fontWeight: 'bold',
backgroundColor: '#f5f5f5',
},
'.MuiDataGrid-groupExpanded': {
color: '#1976d2',
},
}}
/>
Такой подход позволяет интегрировать группы в дизайн приложения без использования внешних библиотек для стилизации.
5. Управление моделью группировки Row grouping можно изменять на лету, что важно для интерактивных таблиц с фильтрацией и сортировкой:
const [groupingModel, setGroupingModel] = useState(['category']);
<DataGridPro
rows={rows}
columns={columns}
rowGroupingModel={groupingModel}
onRowGroupingModelCha nge={(newModel) => setGroupingModel(newModel)}
/>
Это позволяет пользователю выбирать, по каким колонкам отображать группы, обеспечивая гибкую и динамичную работу с данными.
6. Множественные уровни группировки MUI позволяет создавать иерархию групп:
rowGroupingModel={['category', 'name']}
При такой конфигурации сначала строки будут сгруппированы по
category, а внутри каждой категории — по name.
При этом можно управлять отображением каждого уровня через
groupDisplayType и настраивать агрегаты на любом
уровне.
7. Управление раскрытием групп Состояние
раскрытия/свёртывания группы контролируется через событие
onRowGroupExpandChange и проп
expandedRowGroups:
<DataGridPro
rows={rows}
columns={columns}
rowGroupingModel={['category']}
expandedRowGroups={{ category: ['Фрукты'] }}
onRowGroupExpandCha nge={(params) => console.log(params)}
/>
Это позволяет сохранять состояние групп после обновления данных или фильтрации, а также реализовывать сложную логику пользовательского интерфейса.
Гибкость MUI в работе с группировкой строк позволяет создавать таблицы любой сложности: от простых сводных списков до многоуровневых отчетов с динамическим изменением структуры данных.