Для интеграции Chakra UI с проектом, созданным через Create React App (CRA), первым шагом является установка необходимых пакетов через npm или yarn. Основные зависимости включают саму библиотеку Chakra UI и её систему иконок:
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
npm install @chakra-ui/icons
@chakra-ui/react — ядро библиотеки, предоставляет
компоненты и хук useStyleConfig.@emotion/react и @emotion/styled —
необходимы для стилизации компонентов.framer-motion — библиотека для анимаций, используется
Chakra UI для плавных переходов.@chakra-ui/icons — набор предустановленных иконок для
быстрого использования.После установки рекомендуется проверить корректность версий библиотек, чтобы исключить конфликты с React, особенно если проект создан недавно с CRA 5+.
Для того чтобы компоненты Chakra UI корректно работали в приложении,
необходимо обернуть корневой компонент <App /> в
<ChakraProvider>. Обычно это делается в файле
index.js:
import React from 'react';
import ReactDOM from 'react-dom/client';
import { ChakraProvider } from '@chakra-ui/react';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<ChakraProvider>
<App />
</ChakraProvider>
);
<ChakraProvider> предоставляет глобальную тему,
управление цветовой схемой и доступ к системным хукам.theme для
кастомизации стилей и цветов.Chakra UI позволяет расширять или полностью переопределять
стандартную тему. В CRA это делается через импорт
extendTheme:
import { extendTheme } from '@chakra-ui/react';
const customTheme = extendTheme({
colors: {
brand: {
50: '#f5f7ff',
100: '#e0e7ff',
500: '#3b82f6',
900: '#1e40af',
},
},
fonts: {
heading: 'Inter, sans-serif',
body: 'Roboto, sans-serif',
},
components: {
Button: {
baseStyle: {
fontWeight: 'bold',
},
sizes: {
xl: {
h: 12,
fontSize: 'lg',
px: 6,
},
},
variants: {
solid: (props) => ({
bg: props.colorMode === 'dark' ? 'brand.500' : 'brand.100',
}),
},
},
},
});
export default customTheme;
После создания кастомной темы её необходимо передать в
ChakraProvider:
import customTheme from './theme';
<ChakraProvider theme={customTheme}>
<App />
</ChakraProvider>
Это обеспечивает глобальное применение всех настроек, включая цвета, шрифты и стили компонентов.
Chakra UI поддерживает переключение между светлой и тёмной темами с
помощью ColorModeProvider и хука useColorMode.
В CRA это можно настроить прямо через ChakraProvider:
import { ChakraProvider, extendTheme, ColorModeScript } from '@chakra-ui/react';
import customTheme from './theme';
const theme = extendTheme({ ...customTheme, config: { initialColorMode: 'light', useSystemColorMode: true } });
root.render(
<>
<ColorModeScript initialColorMode={theme.config.initialColorMode} />
<ChakraProvider theme={theme}>
<App />
</ChakraProvider>
</>
);
initialColorMode — задаёт стартовый режим
приложения.useSystemColorMode — позволяет автоматически
подстраиваться под системные настройки пользователя.ColorModeScript нужен для предотвращения мигания
интерфейса при первичной загрузке страницы.Для переключения режима в компонентах используется хук:
import { useColorMode, Button } from '@chakra-ui/react';
function ToggleMode() {
const { colorMode, toggleColorMode } = useColorMode();
return <Button onCl ick={toggleColorMode}>{colorMode === 'light' ? 'Тёмный режим' : 'Светлый режим'}</Button>;
}
Chakra UI предоставляет широкий набор готовых компонентов:
Box, Flex, Grid,
Button, Input, FormControl и
многие другие. Основная особенность — стилизация через пропсы, что
устраняет необходимость писать CSS:
import { Box, Flex, Button, Heading } from '@chakra-ui/react';
function LayoutExample() {
return (
<Flex direction="column" align="center" justify="center" minH="100vh" bg="gray.50">
<Box p={6} rounded="md" shadow="md" bg="white">
<Heading mb={4}>Добро пожаловать в Chakra UI</Heading>
<Button colorScheme="blue" size="lg">Нажми меня</Button>
</Box>
</Flex>
);
}
Flex и Box — базовые контейнеры для
построения layout.p, bg,
rounded, shadow), что позволяет быстро
прототипировать интерфейс._hover, _focus, responsive
массивы ([sm, md, lg]).Chakra UI совместим с библиотеками для работы с формами, такими как
react-hook-form и formik. Пример с
react-hook-form:
import { useForm } from 'react-hook-form';
import { FormControl, FormLabel, Input, Button, FormErrorMessage } from '@chakra-ui/react';
function SignupForm() {
const { handleSubmit, register, formState: { errors } } = useForm();
const onSub mit = (values) => console.log(values);
return (
<form onSub mit={handleSubmit(onSubmit)}>
<FormControl isInvalid={errors.username}>
<FormLabel>Имя пользователя</FormLabel>
<Input {...register('username', { required: 'Обязательное поле' })} />
<FormErrorMessage>{errors.username && errors.username.message}</FormErrorMessage>
</FormControl>
<Button mt={4} colorScheme="teal" type="submit">Регистрация</Button>
</form>
);
}
FormControl автоматически управляет состоянием
ошибок.FormErrorMessage отображает сообщения об ошибках.react-hook-form позволяет
минимизировать количество кода для управления формами.Chakra UI имеет встроенный пакет иконок
@chakra-ui/icons, который можно использовать без
дополнительных зависимостей:
import { EmailIcon, CheckIcon } from '@chakra-ui/icons';
import { Button } from '@chakra-ui/react';
function IconButtons() {
return (
<>
<Button leftIcon={<EmailIcon />} colorScheme="blue">Email</Button>
<Button rightIcon={<CheckIcon />} colorScheme="green">Подтвердить</Button>
</>
);
}
leftIcon и rightIcon — специальные пропсы
для добавления иконок в кнопку.colorScheme.Для CRA можно подключать шрифты через index.css или
использовать тему Chakra UI:
import { extendTheme } from '@chakra-ui/react';
const theme = extendTheme({
fonts: {
heading: `'Montserrat', sans-serif`,
body: `'Open Sans', sans-serif`,
},
});
export default theme;
<link> в
public/index.html.Chakra UI интегрируется с framer-motion, что позволяет
создавать анимации появления, скрытия и переходов между состояниями:
import { Box } from '@chakra-ui/react';
import { motion } from 'framer-motion';
const MotionBox = motion(Box);
function AnimatedBox() {
return (
<MotionBox
p={6}
bg="blue.400"
rounded="md"
initial={{ opacity: 0, y: -20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5 }}
>
Анимированный блок
</MotionBox>
);
}
motion(Box) превращает любой компонент Chakra UI в
анимируемый.initial, animate и
exit состояния для сложных эффектов.При работе с CRA и Chakra UI рекомендуется использовать структуру:
src/
├─ components/ // переиспользуемые UI-компоненты
├─ pages/ // страницы приложения
├─ theme/ // кастомная тема и расширения Chakra UI
└─ App.js // главный компонент приложения
useTheme и
стили через пропсы.Этот подход обеспечивает полную интеграцию Chakra UI в проект Create React App, позволяя создавать быстрые, адаптивные и легко настраиваемые интерфейсы.