При переходе с других библиотек компонентов, таких как Material-UI, Ant Design или Bootstrap, основными факторами выбора Chakra UI становятся простота стилизации, гибкость темы и интеграция с React. Chakra UI строится на концепции стильных пропсов, что позволяет задавать визуальные свойства компонентов напрямую через атрибуты, без необходимости создания отдельных CSS-файлов или использования сложных CSS-in-JS решений.
Другой ключевой аспект — адаптивная верстка из
коробки. Свойства responsive позволяют задавать
разные значения для разных брейкпоинтов без дополнительного кода. Это
значительно ускоряет миграцию и уменьшает количество потенциальных
ошибок при конвертации компонентов.
Перед началом миграции рекомендуется:
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
ChakraProvider и подключить
тему:import { ChakraProvider } from '@chakra-ui/react';
import theme from './theme';
import App from './App';
const Root = () => (
<ChakraProvider theme={theme}>
<App />
</ChakraProvider>
);
export default Root;
import { extendTheme } from '@chakra-ui/react';
const theme = extendTheme({
colors: {
primary: {
100: '#E3F2FD',
500: '#2196F3',
},
},
fonts: {
heading: 'Roboto, sans-serif',
body: 'Open Sans, sans-serif',
},
});
export default theme;
При миграции кнопок с Material-UI Button на Chakra UI
Button структура становится проще:
Material-UI:
<Button variant="contained" color="primary" size="large">
Отправить
</Button>
Chakra UI:
<Button colorScheme="blue" size="lg">
Отправить
</Button>
Ключевые различия:
variant="contained" →
colorScheme="..."size с Material-UI (small,
medium, large) → sm,
md, lgbg,
color, borderRadius,
boxShadow.Chakra UI использует обертку FormControl для управления
состоянием валидности и лейблов:
<FormControl isRequired>
<FormLabel>Email</FormLabel>
<Input type="email" placeholder="Введите email" />
<FormHelperText>Мы никогда не передадим ваш email третьим лицам.</FormHelperText>
</FormControl>
Преимущество в том, что все состояния (валидность, ошибки, хелперы) управляются внутри одного компонента, что упрощает миграцию с Formik или React Hook Form.
Chakra UI предлагает Flex, Grid и
Stack для построения макетов без лишнего CSS:
<Flex justify="space-between" align="center">
<Box>Левый блок</Box>
<Box>Правый блок</Box>
</Flex>
<Grid templateColumns="repeat(3, 1fr)" gap={6}>
<Box bg="red.100">1</Box>
<Box bg="green.100">2</Box>
<Box bg="blue.100">3</Box>
</Grid>
<Stack spacing={4} direction="row">
<Button>Да</Button>
<Button>Нет</Button>
</Stack>
Chakra UI полностью поддерживает темизацию на уровне приложения. Это облегчает замену стилей с других библиотек:
colorScheme.fonts в теме.styles.global
можно задать CSS, аналогичный global.css из других
библиотек.const theme = extendTheme({
styles: {
global: {
body: {
bg: 'gray.50',
color: 'gray.800',
},
},
},
});
Chakra UI упрощает адаптивный дизайн:
<Box fontSize={['sm', 'md', 'lg']} p={[2, 4, 6]}>
Адаптивный текст и отступ
</Box>
При миграции это позволяет избавиться от написания громоздких CSS-медиа-запросов.
Chakra UI интегрируется с @chakra-ui/icons или любыми
React-иконками:
import { AddIcon } from '@chakra-ui/icons';
<Button leftIcon={<AddIcon />} colorScheme="teal">
Добавить
</Button>
Это упрощает замену иконок с Material-UI
@mui/icons-material без изменения логики компонентов.
Миграция не требует полной переработки проекта. Можно:
Stack и Flex для замены
сложных CSS-сеток.Chakra UI позволяет минимизировать количество кастомного CSS и упрощает поддержку компонентов, обеспечивая единый стиль и логичное управление темой.