Библиотека MUI (Material-UI) предоставляет широкий спектр компонентов и инструментов для работы с таблицами и списками данных. Один из ключевых аспектов работы с данными — их экспорт в различные форматы для дальнейшей обработки или отчетности. Рассмотрим основные подходы и практические реализации.
CSV (Comma-Separated Values) Формат CSV является самым популярным для обмена табличными данными. MUI не предоставляет встроенного механизма экспорта, поэтому обычно применяются сторонние библиотеки или ручная генерация CSV.
Пример ручного экспорта таблицы DataGrid в CSV:
import { GridRowsProp, GridColDef } from '@mui/x-data-grid';
const exportToCsv = (rows, columns) => {
const header = columns.map(col => col.headerName).join(',');
const data = rows.map(row =>
columns.map(col => row[col.field]).join(',')
).join('\n');
const csvContent = [header, data].join('\n');
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.setAttribute('download', 'export.csv');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
В этом примере ключевые моменты:
headerName колонокfieldBlob и динамическая генерация ссылки для
скачиванияExcel (XLSX) Для экспорта в Excel часто используется библиотека SheetJS (xlsx). Она позволяет создавать рабочие книги, добавлять листы и настраивать форматирование ячеек.
Пример экспорта DataGrid в Excel:
import * as XLSX from 'xlsx';
const exportToExcel = (rows, columns) => {
const worksheet = XLSX.utils.json_to_sheet(
rows.map(row => {
const formattedRow = {};
columns.forEach(col => {
formattedRow[col.headerName] = row[col.field];
});
return formattedRow;
})
);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');
XLSX.writeFile(workbook, 'export.xlsx');
};
Особенности реализации:
SheetJSheaderNameMUI DataGrid и DataGridPro предоставляют API для работы с выборкой данных, что облегчает экспорт. Основные методы:
apiRef.current.getRowModels() — возвращает все строки
таблицы в виде картыapiRef.current.getVisibleColumns() — возвращает
колонки, видимые в текущем представленииПример экспорта видимых данных DataGrid:
import { useGridApiRef } from '@mui/x-data-grid';
const apiRef = useGridApiRef();
const handleExport = () => {
const rows = Array.from(apiRef.current.getRowModels().values());
const columns = apiRef.current.getVisibleColumns();
exportToCsv(rows, columns);
};
Особенности:
valueGetterДля приложений с серверной логикой часто требуется экспорт данных в формате JSON для последующей отправки на сервер или хранения:
const exportToJson = (rows) => {
const jsonContent = JSON.stringify(rows, null, 2);
const blob = new Blob([jsonContent], { type: 'application/json' });
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.setAttribute('download', 'export.json');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
Ключевые моменты:
JSON.stringify с
отступамиMUI позволяет интегрировать кастомные рендереры и комбинировать экспорт с форматированием:
valueFormatter или собственные функции при формировании
CSV/ExcelcolumnVisibilityModelapiRef.current.getFilteredRowModels()Пример с учетом форматирования дат и валют:
const formattedRows = rows.map(row => ({
Name: row.name,
Date: new Date(row.date).toLocaleDateString(),
Salary: `$${row.salary.toFixed(2)}`
}));
exportToCsv(formattedRows, columns);
csv, xlsx, json) и данные.Экспорт данных в MUI — это комбинация правильного использования API DataGrid, генерации файлов на клиенте и интеграции сторонних библиотек для форматов, таких как CSV и Excel. Правильная организация экспорта позволяет создавать гибкие, масштабируемые и удобные для пользователей интерфейсы с таблицами и отчетами.