Для начала работы с Chakra UI необходимо установить пакет через npm или yarn:
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
или
yarn add @chakra-ui/react @emotion/react @emotion/styled framer-motion
После установки библиотеку нужно интегрировать в проект. В React-приложении основной точкой подключения является корневой компонент:
import { ChakraProvider } from "@chakra-ui/react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(
<ChakraProvider>
<App />
</ChakraProvider>,
document.getElementById("root")
);
ChakraProvider обеспечивает доступ к темам, глобальным
стилям и компонентам Chakra по всему приложению.
Chakra UI поддерживает кастомные темы, что позволяет изменять цвета, шрифты, отступы и другие свойства по умолчанию.
Создание собственной темы выполняется через функцию
extendTheme:
import { extendTheme } from "@chakra-ui/react";
const theme = extendTheme({
colors: {
brand: {
100: "#f7caca",
500: "#e53e3e",
900: "#742a2a",
},
},
fonts: {
heading: "Georgia, serif",
body: "Arial, sans-serif",
},
});
export default theme;
Подключение кастомной темы происходит через
ChakraProvider:
import { ChakraProvider } from "@chakra-ui/react";
import theme from "./theme";
<ChakraProvider theme={theme}>
<App />
</ChakraProvider>
Ключевой момент: все компоненты автоматически получают доступ к расширенной теме, что позволяет использовать новые цвета, шрифты и размеры в стилях и пропсах.
Для оптимальной работы Chakra UI в production необходимо настроить сборку приложения так, чтобы минимизировать размер CSS и исключить ненужные стили. Основные инструменты — Vite, Webpack и Next.js.
Chakra UI поддерживает tree-shaking, что уменьшает размер итогового
бандла. Для этого важно использовать ES-модули
(import { Button } from "@chakra-ui/react"), а не
глобальный импорт всех компонентов
(import * as Chakra from "@chakra-ui/react").
Webpack с mode: "production" автоматически включает
TerserPlugin для JS и MiniCssExtractPlugin для
CSS.
Пример конфигурации:
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
mode: "production",
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
],
},
plugins: [new MiniCssExtractPlugin()],
};
Chakra UI использует динамическое генерацию CSS через emotion,
поэтому обычный PurgeCSS не всегда эффективен. Лучше использовать
встроенные механизмы Chakra и @chakra-ui/styled-system с
правильными пропсами.
Vite обеспечивает мгновенную сборку и эффективный HMR. Для Chakra UI рекомендуется использовать ES-модули и отключить SSR для development, если это не Next.js.
Пример vite.config.js:
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
build: {
minify: 'esbuild',
rollupOptions: {
output: {
manualChunks: {
chakra: ['@chakra-ui/react', '@emotion/react', '@emotion/styled', 'framer-motion']
},
},
},
},
});
Разделение на отдельный чанк chakra позволяет кешировать
библиотеку отдельно и уменьшает размер основного бандла.
Chakra UI хорошо интегрируется с Next.js, однако при server-side rendering (SSR) важно корректно инициализировать стили:
pages/_app.js:import { ChakraProvider } from "@chakra-ui/react";
import theme from "../theme";
function MyApp({ Component, pageProps }) {
return (
<ChakraProvider theme={theme}>
<Component {...pageProps} />
</ChakraProvider>
);
}
export default MyApp;
@chakra-ui/react и
@emotion/react для корректного рендера стилей на
сервере:import { ColorModeScript } from "@chakra-ui/react";
import theme from "../theme";
export default function Document() {
return (
<html lang="en">
<head />
<body>
<ColorModeScript initialColorMode={theme.config.initialColorMode} />
</body>
</html>
);
ColorModeScript гарантирует правильный режим цветовой
темы при загрузке страницы.
ColorModeScript и корректно настроить emotion
cache.Chakra UI использует emotion для генерации CSS на лету. Основные принципы:
bg, color,
p, m, borderRadius) автоматически
конвертируются в CSS.sx для передачи произвольного
CSS:<Box sx={{ display: "flex", alignItems: "center" }}>
Контент
</Box>
GlobalStyle или
CSSReset из Chakra UI.Правильная build-конфигурация включает:
ChakraProvider с кастомной темой.ColorModeScript.sx для упрощения
стилей и динамической генерации CSS.Эти шаги обеспечивают быструю загрузку приложения, оптимальный размер бандла и легкость поддержки стилей.