MUI v5 принесла значительные изменения по сравнению с версией 4, влияющие на структуру проектов и подходы к стилизации. Эти изменения напрямую затрагивают совместимость и требуют внимательного пересмотра существующего кода при обновлении.
@mui/system и styledВ MUI v5 основной акцент сделан на
@mui/system и использование функции
styled, которая заменяет устаревший
makeStyles и withStyles.
makeStyles и withStyles
теперь считаются устаревшими (deprecated) и в будущем будут полностью
удалены. Их использование возможно, но рекомендуется переходить на новую
систему.styled позволяет создавать компоненты с
инкапсулированными стилями и поддержкой темы:import { styled } from '@mui/material/styles';
import Button from '@mui/material/Button';
const MyButton = styled(Button)(({ theme }) => ({
backgroundColor: theme.palette.primary.main,
color: theme.palette.common.white,
'&:hover': {
backgroundColor: theme.palette.primary.dark,
},
}));
Преимущества новой системы:
spacing, palette,
typography).sx и
системные свойстваv5 внедрила новый проп sx,
который позволяет задавать стили на уровне компонентов без необходимости
создавать отдельные классы.
<Box sx={{ display: 'flex', justifyContent: 'center', p: 2 }}>
Контент по центру
</Box>
Особенности:
theme.spacing,
theme.palette).responsive values):<Box sx={{ width: ['100%', '50%', '25%'] }}>Адаптивный блок</Box>
margin,
padding, color, typography).Theme и настройке темыMUI v5 переработала объект темы:
theme.shape и theme.spacing
остался, но theme.overrides заменен на
theme.components:const theme = createTheme({
components: {
MuiButton: {
styleOverrides: {
root: {
borderRadius: 8,
},
},
},
},
});
palette.mode.@mui/material, а не через подмодули:// Старый вариант
import Button from '@material-ui/core/Button';
// Новый вариант
import Button from '@mui/material/Button';
withWidth, useMediaQuery остаются, но
withWidth постепенно выходит из употребления.makeStyles, withStyles – deprecated,
перенос всех кастомных стилей на styled или
sx.theme.overrides заменяется на
theme.components.Типографика получила улучшенную типизацию и поддержку системных свойств:
<Typography variant="h4" sx={{ mb: 2 }}>
Заголовок
</Typography>
sx можно указывать адаптивные размеры:<Typography sx={{ fontSize: { xs: '1rem', sm: '1.5rem' } }}>Текст</Typography>
// Старый вариант
import DeleteIcon from '@material-ui/icons/Delete';
// Новый вариант
import DeleteIcon from '@mui/icons-material/Delete';
@mui/icons-material
вместо @material-ui/icons.sx и
медиазапросы.spacing можно задавать через числа, которые
автоматически конвертируются в пиксели по theme.spacing:<Grid container spacing={2}>
<Grid item xs={6}>Элемент 1</Grid>
<Grid item xs={6}>Элемент 2</Grid>
</Grid>
Box заменяет многие устаревшие контейнеры и
поддерживает любую комбинацию системных свойств.MUI v5 полностью переписана с поддержкой TypeScript:
theme и sx.Theme:declare module '@mui/material/styles' {
interface Palette {
customColor: Palette['primary'];
}
interface PaletteOptions {
customColor?: PaletteOptions['primary'];
}
}
@material-ui/core и
@material-ui/icons на новые пакеты
@mui/material и @mui/icons-material.makeStyles/withStyles на styled
или sx.overrides на
components.sx и медиазапросы.sx и новых пропсов.Эти изменения в MUI v5 делают библиотеку более гибкой, модульной и адаптированной к современным подходам к React и TypeScript, но требуют внимательной миграции с v4 для сохранения стабильности проекта.