В библиотеке MUI (Material-UI) для построения таблиц
и гридов активно используется компонент DataGrid и его
расширение XGrid. Основу отображения данных в этих
компонентах составляют колонки, каждая из которых
описывает поле, способ его отображения, редактирования и взаимодействия
с пользователем.
Колонки задаются через массив объектов columns, где
каждый объект описывает отдельную колонку:
const columns = [
{ field: 'id', headerName: 'ID', width: 70 },
{ field: 'name', headerName: 'Имя', width: 200 },
{ field: 'age', headerName: 'Возраст', type: 'number', width: 100 },
];
Ключевые свойства колонки:
field – уникальный идентификатор колонки, соответствует
ключу в данных (rows).headerName – текст заголовка колонки.width – ширина колонки в пикселях.type – тип данных, влияющий на форматирование и
сортировку.editable – делает ячейки колонки редактируемыми.sortable – включает или отключает возможность
сортировки по колонке.filterable – управляет возможностью фильтрации данных
по колонке.MUI поддерживает несколько встроенных типов колонок, каждый из которых определяет, как данные будут отображаться и обрабатываться:
stringИспользуется для текстовых значений.
type считается
string.{ field: 'name', headerName: 'Имя', type: 'string', width: 200 }
numberПредназначен для числовых данных.
valueFormatter.{
field: 'age',
headerName: 'Возраст',
type: 'number',
width: 100,
valueFormatter: (params) => `${params.value} лет`,
}
date и dateTimeИспользуются для работы с датами.
DatePicker).{
field: 'createdAt',
headerName: 'Дата создания',
type: 'date',
width: 180,
valueFormatter: (params) => new Date(params.value).toLocaleDateString(),
}
booleanДля логических значений (true/false).
{ field: 'isActive', headerName: 'Активен', type: 'boolean', width: 120 }
singleSelectКолонка с выбором одного значения из списка.
{
field: 'role',
headerName: 'Роль',
type: 'singleSelect',
valueOptions: ['Админ', 'Пользователь', 'Гость'],
width: 150,
}
valueFormatter и
valueGettervalueFormatter позволяет преобразовать значение перед
отображением.valueGetter вычисляет значение на основе других полей
строки.{
field: 'fullName',
headerName: 'ФИО',
width: 200,
valueGetter: (params) => `${params.row.firstName} ${params.row.lastName}`,
}
renderCellПозволяет полностью контролировать отображение ячейки с использованием React-компонентов:
{
field: 'status',
headerName: 'Статус',
width: 150,
renderCell: (params) => (
<span style={{ color: params.value === 'Активен' ? 'green' : 'red' }}>
{params.value}
</span>
),
}
Тип колонки определяет поведение встроенной сортировки и фильтрации:
true/false.width – фиксированная ширина.flex – динамическая ширина, пропорциональная другим
колонкам с flex.{ field: 'description', headerName: 'Описание', flex: 1 }
minWidth и maxWidth задают ограничения при
использовании flex.hide скрывает колонку без удаления из массива
columns.editable: true.valueGetter, что
позволяет создавать колонки с агрегированными или комбинированными
данными.rows
через обработчики событий onCellEditCommit или
processRowUpdate.<DataGrid
rows={rows}
columns={columns}
processRowUpdate={(newRow) => ({ ...newRow, updatedAt: new Date() })}
/>
Эта структура и набор свойств колонок в MUI позволяют строить гибкие, интерактивные и типизированные таблицы, легко интегрируемые в сложные веб-приложения с богатой функциональностью фильтрации, сортировки и редактирования.