ChakraProvider — корневой компонент библиотеки
Chakra UI, обеспечивающий глобальную конфигурацию
интерфейса. Через него приложение получает доступ к системе темизации,
стилям по умолчанию, CSS-переменным, механизму сброса стилей и контексту
дизайн-системы.
Фактически ChakraProvider выполняет несколько ключевых
функций:
Все компоненты Chakra UI получают стили и конфигурацию через этот провайдер. Без него библиотека не сможет корректно работать.
Базовое подключение выполняется в точке входа приложения. В React-проектах это обычно файл:
main.jsxindex.jsApp.jsxМинимальная конфигурация выглядит следующим образом.
import { ChakraProvider } from "@chakra-ui/react"
function App() {
return (
<ChakraProvider>
<div>Приложение</div>
</ChakraProvider>
)
}
export default App
После этого любой компонент Chakra UI может использоваться внутри дерева приложения.
Типичная структура подключения в React:
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 располагается выше всех
компонентов интерфейсаChakraProvider объединяет несколько внутренних
механизмов библиотеки:
Контекст темы распространяет дизайн-токены:
Компоненты получают эти значения через style props.
Chakra UI активно использует CSS-переменные. Например:
--chakra-colors-blue-500
--chakra-space-4
--chakra-fonts-body
Благодаря этому:
Chakra UI включает собственный CSS Reset, основанный
на @emotion.
Он нормализует различия между браузерами:
Это обеспечивает предсказуемое поведение компонентов.
Одна из основных возможностей ChakraProvider —
подключение кастомной темы.
Пример:
import { ChakraProvider } from "@chakra-ui/react"
import { extendTheme } from "@chakra-ui/react"
const theme = extendTheme({
colors: {
brand: {
500: "#4A90E2"
}
}
})
function App() {
return (
<ChakraProvider theme={theme}>
<div>Приложение</div>
</ChakraProvider>
)
}
Параметр theme передаётся через props.
Функция extendTheme используется для расширения
стандартной темы Chakra UI.
Она позволяет:
Пример настройки:
import { extendTheme } from "@chakra-ui/react"
const theme = extendTheme({
fonts: {
heading: "Inter",
body: "Inter"
},
colors: {
primary: {
500: "#3182CE"
}
}
})
После передачи темы в ChakraProvider новые токены
становятся доступны во всех компонентах.
Chakra UI позволяет задавать глобальные стили внутри темы.
Пример:
const theme = extendTheme({
styles: {
global: {
body: {
bg: "gray.50",
color: "gray.800"
}
}
}
})
Такая конфигурация автоматически применится ко всему приложению.
Иногда необходимо отключить встроенный сброс стилей.
ChakraProvider предоставляет параметр:
resetCSS
По умолчанию он включён.
Отключение:
<ChakraProvider resetCSS={false}>
<App />
</ChakraProvider>
Это может потребоваться при использовании других систем нормализации CSS.
В некоторых архитектурах допускается использование нескольких
ChakraProvider.
Пример:
<ChakraProvider theme={baseTheme}>
<App>
<ChakraProvider theme={adminTheme}>
<AdminPanel />
</ChakraProvider>
</App>
</ChakraProvider>
Вложенный провайдер переопределяет тему только для своего дерева компонентов.
Chakra UI поддерживает светлую и тёмную темы через
систему color mode.
ChakraProvider автоматически активирует поддержку
переключения режимов.
Настройка выполняется через тему:
const theme = extendTheme({
config: {
initialColorMode: "light",
useSystemColorMode: false
}
})
Параметры:
| Параметр | Назначение |
|---|---|
| initialColorMode | начальная тема |
| useSystemColorMode | использовать настройки системы |
Для корректной работы темы необходимо добавить
ColorModeScript.
Он предотвращает мерцание темы при загрузке страницы.
Пример:
import { ColorModeScript } from "@chakra-ui/react"
function Root() {
return (
<>
<ColorModeScript />
<ChakraProvider>
<App />
</ChakraProvider>
</>
)
}
Скрипт устанавливает правильную тему до рендеринга React.
После подключения ChakraProvider становятся доступны
style props.
Пример использования:
<Box
bg="blue.500"
color="white"
p="4"
borderRadius="md"
>
Контент
</Box>
Здесь используются значения из темы:
blue.500 — цвет4 — spacingmd — радиус границыВсе они приходят из конфигурации темы, переданной через
ChakraProvider.
При использовании Server-Side Rendering (например, Next.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
В SSR-приложениях Chakra UI также использует Emotion cache для генерации CSS.
Основные свойства компонента:
| Prop | Назначение |
|---|---|
| theme | пользовательская тема |
| resetCSS | включение CSS Reset |
| cssVarsRoot | корневой элемент для CSS variables |
| portalZIndex | z-index порталов |
Параметр cssVarsRoot определяет DOM-элемент, где
размещаются CSS-переменные темы.
По умолчанию используется:
:root
Пример изменения:
<ChakraProvider cssVarsRoot="#app-root">
<App />
</ChakraProvider>
Это может быть полезно при:
Chakra UI использует порталы для компонентов:
portalZIndex позволяет задать их базовый уровень
слоя.
<ChakraProvider portalZIndex={40}>
<App />
</ChakraProvider>
Наиболее распространённая архитектура:
ChakraProvider
└── Router
└── Pages
└── Components
Обычно тема выносится в отдельный модуль.
src/
theme/
index.js
Пример:
import { extendTheme } from "@chakra-ui/react"
const theme = extendTheme({
colors: {
brand: {
500: "#5A67D8"
}
}
})
export default theme
Подключение:
import theme from "./theme"
<ChakraProvider theme={theme}>
Тема используется как единый источник истины для UI.
Через неё определяются:
Это позволяет поддерживать единый стиль интерфейса.
Неправильно:
<App>
<ChakraProvider>
<Component />
</ChakraProvider>
</App>
Правильно:
<ChakraProvider>
<App />
</ChakraProvider>
Это вызывает:
Ошибка:
<ChakraProvider theme="theme">
Правильно:
<ChakraProvider theme={theme}>
ChakraProvider формирует фундамент всей системы
компонентов:
Через него происходит централизованная конфигурация пользовательского интерфейса, что делает Chakra UI полноценной масштабируемой дизайн-системой для React-приложений.