Компонент Table в библиотеке MUI представляет собой мощный инструмент для отображения табличных данных в приложениях на React. В его основе лежит семантическая структура HTML-таблицы, но с расширенными возможностями кастомизации и интеграции с системой стилей Material UI.
Ключевые компоненты Table:
Стандартная структура таблицы в MUI строится следующим образом:
<TableContainer>
<Table>
<TableHead>
<TableRow>
<TableCell>Заголовок 1</TableCell>
<TableCell>Заголовок 2</TableCell>
</TableRow>
</TableHead>
<TableBody>
<TableRow>
<TableCell>Данные 1</TableCell>
<TableCell>Данные 2</TableCell>
</TableRow>
<TableRow>
<TableCell>Данные 3</TableCell>
<TableCell>Данные 4</TableCell>
</TableRow>
</TableBody>
</Table>
</TableContainer>
Особенности структуры:
sx и className.hover, selected для
интерактивного поведения.align, который
позволяет задавать выравнивание текста: left,
center, right, а также свойство
component, которое определяет HTML-тег (например,
th для заголовка).MUI предоставляет несколько способов управления внешним видом таблицы:
sx:<TableCell sx={{ fontWeight: 'bold', color: 'primary.main' }}>
Заголовок
</TableCell>
const theme = createTheme({
components: {
MuiTableCell: {
styleOverrides: {
head: {
backgroundColor: '#f5f5f5',
fontSize: '1rem'
},
body: {
fontSize: '0.875rem'
}
}
}
}
});
<TableRow hover selected={isSelected}>
<TableCell>Данные</TableCell>
</TableRow>
Для работы с таблицами, содержащими сотни или тысячи строк, важно учитывать производительность:
react-virtualized или react-window.Table.React.memo
для отдельных компонентов строк или ячеек.<TablePagination
rowsPerPageOptions={[5, 10, 25]}
component="div"
count={rows.length}
rowsPerPage={rowsPerPage}
page={page}
onPageCha nge={handleChangePage}
onRowsPerPageCha nge={handleChangeRowsPerPage}
/>
Особенности TablePagination:
rowsPerPageOptions определяет доступные варианты числа
строк на странице.count указывает общее количество строк.page и rowsPerPage управляют текущей
страницей и количеством отображаемых строк.onPageChange и onRowsPerPageChange
позволяют управлять состоянием пагинации.Полная базовая структура таблицы с заголовком, телом и пагинацией:
<TableContainer>
<Table>
<TableHead>
<TableRow>
<TableCell>Имя</TableCell>
<TableCell align="right">Возраст</TableCell>
</TableRow>
</TableHead>
<TableBody>
{rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => (
<TableRow key={row.id} hover>
<TableCell>{row.name}</TableCell>
<TableCell align="right">{row.age}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
<TablePagination
rowsPerPageOptions={[5, 10, 25]}
component="div"
count={rows.length}
rowsPerPage={rowsPerPage}
page={page}
onPageCha nge={handleChangePage}
onRowsPerPageCha nge={handleChangeRowsPerPage}
/>
</TableContainer>
Эта структура обеспечивает гибкость отображения данных, возможность кастомизации внешнего вида и интеграцию с системой Material UI, позволяя создавать как простые, так и сложные таблицы с интерактивными элементами.