Для работы с компонентом DataGrid необходимо
установить пакет @mui/x-data-grid:
npm install @mui/x-data-grid
или
yarn add @mui/x-data-grid
После установки компонент импортируется из пакета:
import { DataGrid } from '@mui/x-data-grid';
DataGrid — это мощный инструмент для отображения больших таблиц с возможностью сортировки, фильтрации, постраничной навигации и редактирования данных.
Компонент DataGrid требует два ключевых свойства:
rows и columns.
Пример базовой таблицы:
const columns = [
{ field: 'id', headerName: 'ID', width: 70 },
{ field: 'firstName', headerName: 'Имя', width: 130 },
{ field: 'lastName', headerName: 'Фамилия', width: 130 },
{ field: 'age', headerName: 'Возраст', type: 'number', width: 90 },
];
const rows = [
{ id: 1, lastName: 'Иванов', firstName: 'Иван', age: 35 },
{ id: 2, lastName: 'Петров', firstName: 'Пётр', age: 42 },
{ id: 3, lastName: 'Сидоров', firstName: 'Сидор', age: 29 },
];
<DataGrid
rows={rows}
columns={columns}
pageSize={5}
rowsPerPageOptions={[5]}
checkboxSelection
/>
pageSize — количество строк на странице.rowsPerPageOptions — массив вариантов выбора размера
страницы.checkboxSelection — добавляет колонку с чекбоксами для
выбора строк.Каждая колонка имеет ряд ключевых свойств:
string,
number, date, boolean).true).Пример кастомного рендера:
{
field: 'fullName',
headerName: 'Полное имя',
width: 200,
valueGetter: (params) =>
`${params.row.firstName || ''} ${params.row.lastName || ''}`,
}
valueGetter используется для вычисления значения на
основе данных строки.
DataGrid поддерживает редактирование прямо в таблице. Для включения
нужно добавить свойство editable к колонке:
{ field: 'age', headerName: 'Возраст', type: 'number', width: 90, editable: true }
Для отслеживания изменений используется событие
onCellEditCommit:
<DataGrid
rows={rows}
columns={columns}
onCellEditCom mit={(params) => {
console.log('Изменение ячейки:', params);
}}
/>
params.id — идентификатор строки.params.field — поле, которое редактировалось.params.value — новое значение.Сортировка осуществляется автоматически при
установке sortable: true в колонке. Для контроля порядка
сортировки можно использовать свойство sortModel:
const [sortModel, setSortModel] = React.useState([
{ field: 'age', sort: 'asc' },
]);
<DataGrid
rows={rows}
columns={columns}
sortModel={sortModel}
onSortModelCha nge={(model) => setSortModel(model)}
/>
Фильтрация включается через
filterModel:
const [filterModel, setFilterModel] = React.useState({
items: [{ columnField: 'age', operatorValue: '>=', value: '30' }],
});
<DataGrid
rows={rows}
columns={columns}
filterModel={filterModel}
onFilterModelCha nge={(model) => setFilterModel(model)}
/>
operatorValue поддерживает такие значения, как
=, !=, >=, <=,
contains.Для больших таблиц DataGrid поддерживает встроенную пагинацию. Ключевые свойства:
client или server).Пример:
<DataGrid
rows={rows}
columns={columns}
pageSize={5}
rowsPerPageOptions={[5, 10, 20]}
onPageCha nge={(newPage) => console.log('Текущая страница:', newPage)}
/>
Для серверной пагинации (paginationMode="server")
необходимо самостоятельно подгружать данные с сервера при смене
страницы.
Для добавления возможности выбора строк используется
checkboxSelection и события
onSelectionModelChange:
<DataGrid
rows={rows}
columns={columns}
checkboxSelection
onSelectionModelCha nge={(ids) => console.log('Выбранные строки:', ids)}
/>
ids — массив идентификаторов выбранных строк.selectionModel для программного
управления выбором.DataGrid использует систему sx для стилизации:
<DataGrid
rows={rows}
columns={columns}
sx={{
border: 2,
borderColor: 'primary.main',
'& .MuiDataGrid-cell': { color: 'secondary.main' },
}}
/>
getRowClassName позволяет динамически назначать
CSS-классы строкам.<DataGrid
rows={rows}
columns={columns}
getRowClassName={(params) =>
params.row.age > 40 ? 'age-old' : 'age-young'
}
/>
CSS:
.age-old {
background-color: #fdecea;
}
.age-young {
background-color: #eaf7fd;
}
Для работы с API DataGrid обеспечивает свойства
paginationMode="server" и
sortingMode="server":
<DataGrid
rows={rows}
columns={columns}
paginationMode="server"
sortingMode="server"
onPageCha nge={fetchPage}
onSortModelCha nge={fetchSortedData}
/>
fetchPage — функция, подгружающая данные текущей
страницы.fetchSortedData — функция, подгружающая данные с учетом
сортировки.Такой подход позволяет обрабатывать большие массивы данных без нагрузки на клиент.
(Инструкция строго не требует раздела «Заключение», поэтому данный блок не нужен; все ключевые настройки DataGrid рассмотрены выше.)