MUI (Material-UI) — это библиотека React-компонентов, реализующая дизайн-систему Material Design. Основной принцип работы с MUI — использование готовых компонентов, которые можно конфигурировать через props, стилизовать с помощью системных инструментов и объединять для создания сложных интерфейсов.
Компоненты MUI делятся на несколько категорий:
Каждый компонент поддерживает систему темизации, что
позволяет задавать глобальные цвета, отступы и типографику через объект
theme. Это обеспечивает единообразие интерфейса и упрощает
масштабирование приложений.
Компонент <Button> предоставляет возможность
создания интерактивных кнопок с различными стилями:
import Button from '@mui/material/Button';
<Button variant="contained" color="primary">Отправить</Button>
<Button variant="outlined" color="secondary">Отмена</Button>
<Button variant="text">Просто текст</Button>
Ключевые props:
variant — тип кнопки (text,
outlined, contained).color — цветовая схема (primary,
secondary, error, success,
warning, info).size — размер (small, medium,
large).disabled — отключение кнопки.startIcon / endIcon — добавление иконки
слева или справа.Компонент <TextField> объединяет
<input> и лейбл с валидацией:
import TextField from '@mui/material/TextField';
<TextField label="Имя" variant="outlined" fullWidth required />
<TextField label="Пароль" type="password" variant="filled" />
Особенности:
variant — визуальный стиль (outlined,
filled, standard).fullWidth — растягивает поле на всю ширину
контейнера.required — добавляет атрибут обязательного
заполнения.helperText — отображает подсказку или сообщение об
ошибке.react-hook-form, formik).Система сетки позволяет строить адаптивные интерфейсы:
import Grid from '@mui/material/Grid';
<Grid container spacing={2}>
<Grid item xs={12} sm={6}>Левый блок</Grid>
<Grid item xs={12} sm={6}>Правый блок</Grid>
</Grid>
Основные свойства:
container — задает контейнер сетки.item — задает отдельный элемент сетки.spacing — расстояние между элементами.xs, sm, md, lg,
xl — управление шириной на разных точках перелома.Компонент <Box> — универсальный контейнер для
стилизации и позиционирования:
import Box from '@mui/material/Box';
<Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>
Контент по центру
</Box>
Система sx:
theme.spacing, theme.palette).className.Компоненты <Menu> и <Dialog>
управляют всплывающими элементами интерфейса:
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';
<Menu open={open} onCl ose={handleClose}>
<MenuItem onCl ick={handleClose}>Профиль</MenuItem>
<MenuItem onCl ick={handleClose}>Выход</MenuItem>
</Menu>
import Dialog from '@mui/material/Dialog';
<Dialog open={open} onCl ose={handleClose}>
<DialogTitle>Подтвердите действие</DialogTitle>
<DialogContent>Вы уверены, что хотите удалить элемент?</DialogContent>
</Dialog>
Особенности:
open и событие
onClose.Компонент <Table> позволяет создавать динамические
и сортируемые таблицы:
import Table from '@mui/material/Table';
import TableBody from '@mui/material/TableBody';
import TableCell from '@mui/material/TableCell';
import TableContainer from '@mui/material/TableContainer';
import TableHead from '@mui/material/TableHead';
import TableRow from '@mui/material/TableRow';
import Paper from '@mui/material/Paper';
<TableContainer component={Paper}>
<Table>
<TableHead>
<TableRow>
<TableCell>Имя</TableCell>
<TableCell>Возраст</TableCell>
</TableRow>
</TableHead>
<TableBody>
<TableRow>
<TableCell>Иван</TableCell>
<TableCell>30</TableCell>
</TableRow>
</TableBody>
</Table>
</TableContainer>
Возможности:
<Checkbox> и
<Switch> для интерактивного выбора.MUI предоставляет мощные инструменты для кастомизации:
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
palette: {
primary: { main: '#1976d2' },
secondary: { main: '#dc004e' },
},
typography: {
fontFamily: 'Roboto, Arial, sans-serif',
},
});
<ThemeProvider theme={theme}>
<App />
</ThemeProvider>
sx — стили для отдельных
компонентов.import { styled } from '@mui/material/styles';
import Button from '@mui/material/Button';
const MyButton = styled(Button)({
backgroundColor: '#ff5722',
'&:hover': { backgroundColor: '#e64a19' },
});
Компоненты MUI легко комбинируются и расширяются через:
component для замены базового HTML-элемента.Пример замены тега у кнопки:
<Button component="a" href="https://mui.com" target="_blank">
Перейти на сайт
</Button>
Это позволяет использовать MUI в проектах с разной семантикой и интегрировать библиотеку в сложные приложения без потери гибкости.
MUI обеспечивает полный набор инструментов для создания интерфейсов, от базовых элементов до сложных адаптивных систем. Правильное использование компонентной структуры, темы и стилей позволяет создавать масштабируемые и единообразные приложения на React.