В библиотеке MUI (Material-UI) компоненты, такие как
Checkbox, Radio и Switch,
предоставляют возможность использовать собственные
иконки вместо стандартных, что позволяет создавать уникальный
визуальный стиль и адаптировать интерфейс под дизайн проекта.
Компонент Checkbox поддерживает два ключевых свойства
для иконок:
icon – отображаемая иконка в невыбранном
состоянии.checkedIcon – отображаемая иконка в выбранном
состоянии.Пример применения:
import Checkbox from '@mui/material/Checkbox';
import FavoriteBorder from '@mui/icons-material/FavoriteBorder';
import Favorite from '@mui/icons-material/Favorite';
function CustomCheckbox() {
return (
<Checkbox
icon={<FavoriteBorder />}
checkedIcon={<Favorite />}
color="secondary"
/>
);
}
В этом примере стандартные галочки заменяются иконками сердца.
color="secondary" позволяет использовать вторичный цвет
темы, но цвет иконок можно полностью кастомизировать через
sx или стиль иконки.
Для радиокнопок (Radio) используется аналогичная
концепция:
icon – состояние неактивной
радиокнопки.checkedIcon – состояние активной
радиокнопки.Пример:
import Radio from '@mui/material/Radio';
import RadioButtonUncheckedIcon from '@mui/icons-material/RadioButtonUnchecked';
import RadioButtonCheckedIcon from '@mui/icons-material/RadioButtonChecked';
function CustomRadio() {
return (
<Radio
icon={<RadioButtonUncheckedIcon />}
checkedIcon={<RadioButtonCheckedIcon />}
/>
);
}
Можно использовать не только иконки из
@mui/icons-material, но и любые SVG-компоненты или даже
собственные React-компоненты.
Компонент Switch позволяет задавать свои визуальные
элементы через icon и checkedIcon, но чаще
всего кастомизация делается через styled и внутренние
псевдоэлементы.
Пример кастомного Switch:
import Switch from '@mui/material/Switch';
import { styled } from '@mui/material/styles';
const CustomSwitch = styled(Switch)(({ theme }) => ({
width: 62,
height: 34,
padding: 7,
'& .MuiSwitch-switchBase': {
margin: 1,
padding: 0,
transform: 'translateX(6px)',
'&.Mui-checked': {
transform: 'translateX(22px)',
color: '#fff',
'& + .MuiSwitch-track': {
backgroundColor: theme.palette.primary.main,
opacity: 1,
border: 0,
},
},
},
'& .MuiSwitch-thumb': {
backgroundColor: '#fff',
width: 32,
height: 32,
},
'& .MuiSwitch-track': {
borderRadius: 20 / 2,
backgroundColor: '#bdbdbd',
opacity: 1,
transition: theme.transitions.create(['background-color'], {
duration: 500,
}),
},
}));
function AppSwitch() {
return <CustomSwitch />;
}
Здесь используется глубокая настройка стилей через
styled, что позволяет полностью менять внешний вид иконок и
трека переключателя, включая размеры, цвета и анимацию.
Для полной кастомизации можно создать собственные SVG-иконки и
передавать их в свойства icon и
checkedIcon:
import Checkbox from '@mui/material/Checkbox';
const CustomUnchecked = () => (
<svg width="24" height="24">
<circle cx="12" cy="12" r="10" stroke="gray" strokeWidth="2" fill="none" />
</svg>
);
const CustomChecked = () => (
<svg width="24" height="24">
<circle cx="12" cy="12" r="10" fill="blue" />
<path d="M8 12l2 2 4-4" stroke="white" strokeWidth="2" />
</svg>
);
function SvgCheckbox() {
return <Checkbox icon={<CustomUnchecked />} checkedIcon={<CustomChecked />} />;
}
SVG полностью контролируется через React, что позволяет менять форму, цвет, размер, анимацию и другие свойства динамически.
Компоненты MUI позволяют менять иконки во время выполнения, используя состояние React:
import Checkbox from '@mui/material/Checkbox';
import { useState } from 'react';
import StarBorder from '@mui/icons-material/StarBorder';
import Star from '@mui/icons-material/Star';
function DynamicIconCheckbox() {
const [checked, setChecked] = useState(false);
return (
<Checkbox
checked={checked}
onCha nge={() => setChecked(!checked)}
icon={checked ? <Star /> : <StarBorder />}
checkedIcon={<Star />}
/>
);
}
Такой подход позволяет реализовать сложные анимации, переключения между разными иконками в зависимости от состояния, тем или других внешних факторов.
icon и
checkedIcon – базовый способ кастомизации.styled и sx –
для полного контроля внешнего вида, включая размеры, цвета и
анимацию.Такой подход к кастомным иконкам делает MUI гибким инструментом для реализации уникального дизайна компонентов выбора.