Для начала работы с MUI необходимо установить пакет
@mui/material и сопутствующую библиотеку иконок
@mui/icons-material. Используется менеджер пакетов npm или
yarn:
npm install @mui/material @emotion/react @emotion/styled @mui/icons-material
или
yarn add @mui/material @emotion/react @emotion/styled @mui/icons-material
MUI требует наличия библиотеки стилизации @emotion/react
и @emotion/styled, которые обеспечивают систему темизации и
стилизованные компоненты.
После установки компоненты можно импортировать напрямую:
import Button from '@mui/material/Button';
import TextField from '@mui/material/TextField';
В качестве первого компонента часто используют кнопку
Button. Она поддерживает несколько свойств для
кастомизации:
variant – определяет стиль кнопки (text,
contained, outlined).color – цветовая схема (primary,
secondary, error, warning,
info, success).size – размер кнопки (small,
medium, large).onClick – обработчик клика.Пример использования:
import React from 'react';
import Button from '@mui/material/Button';
function App() {
const handleClick = () => {
console.log('Кнопка нажата');
};
return (
);
}
export default App;
В этом примере создается кнопка с синим фоном (primary)
и стандартным размером (medium). При нажатии выводится
сообщение в консоль.
MUI предоставляет возможность глобальной настройки цветов,
типографики и компонентов с помощью темы. Создание темы производится
через функцию createTheme:
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
palette: {
primary: {
main: '#1976d2',
},
secondary: {
main: '#dc004e',
},
},
typography: {
fontFamily: 'Roboto, Arial, sans-serif',
button: {
textTransform: 'none',
},
},
});
Компоненты, обернутые в ThemeProvider, наследуют эту
тему:
Ключевые моменты:
palette и typography.Button, через components в теме.ThemeProvider автоматически
наследует заданную тему.Существует несколько способов стилизации компонентов MUI:
sx – быстрый способ
инлайн-стилей:
styled – создание отдельного
стилизованного компонента:import { styled } from '@mui/material/styles';
import Button from '@mui/material/Button';
const CustomButton = styled(Button)({
backgroundColor: '#4caf50',
color: '#fff',
'&:hover': {
backgroundColor: '#388e3c',
},
});
Стили через styled
makeStyles (устаревающий подход,
оставлен для совместимости с предыдущими версиями).MUI предлагает библиотеку готовых иконок. Подключение производится из
@mui/icons-material:
import DeleteIcon from '@mui/icons-material/Delete';
import Button from '@mui/material/Button';
}>
Удалить
Особенности:
startIcon и endIcon позволяют добавлять
иконки перед или после текста кнопки.color у кнопки.TextField – базовый компонент для ввода данных. Основные
свойства:
label – подпись поля.variant – стиль поля (outlined,
filled, standard).type – тип ввода (text,
password, number и т.д.).value и onChange – управление состоянием
поля.Пример:
import React, { useState } from 'react';
import TextField from '@mui/material/TextField';
import Button from '@mui/material/Button';
function Form() {
const [name, setName] = useState('');
return (
);
}
Ключевые моменты:
TextField объединяет label, input и helper text.error и helperText.FormControl и
FormHelperText для более сложных форм.MUI предоставляет систему Grid для построения адаптивных макетов. Основные свойства:
container – обозначает контейнер сетки.item – элемент сетки.spacing – расстояние между элементами.xs, sm, md, lg,
xl – управление размером элементов на разных
разрешениях.Пример:
import Grid from '@mui/material/Grid';
import Paper from '@mui/material/Paper';
Левый блок
Правый блок
Особенности:
xs, sm, md и т.д.Paper используется для визуального выделения
блоков.Все компоненты MUI полностью совместимы с React, поэтому управление состоянием осуществляется через стандартные хуки:
useState для локального состояния.useEffect для побочных эффектов.value и onChange для
контролируемых компонентов.Пример с контролируемой кнопкой и текстовым полем:
function ControlledExample() {
const [text, setText] = useState('');
return (
<>
setText(e.target.value)}
/>
>
);
}
Ключевые моменты: