Для интеграции Chakra UI с проектом на Next.js первым шагом является установка необходимых пакетов:
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
@chakra-ui/react — основной пакет библиотеки.@emotion/react и @emotion/styled —
зависимости для стилизации компонентов.framer-motion — используется для анимаций компонентов
Chakra UI.После установки создаётся провайдер ChakraProvider,
который оборачивает приложение и предоставляет контекст для всех
компонентов Chakra. В Next.js это делается в файле _app.js
или _app.tsx:
import { ChakraProvider } from "@chakra-ui/react";
function MyApp({ Component, pageProps }) {
return (
);
}
export default MyApp;
При необходимости можно использовать кастомную тему,
создавая файл theme.js:
import { extendTheme } from "@chakra-ui/react";
const theme = extendTheme({
colors: {
brand: {
100: "#f7c0c0",
500: "#e53e3e",
900: "#822727",
},
},
fonts: {
heading: "Montserrat, sans-serif",
body: "Inter, sans-serif",
},
});
export default theme;
И подключать её через ChakraProvider:
import { ChakraProvider } from "@chakra-ui/react";
import theme from "../theme";
function MyApp({ Component, pageProps }) {
return (
);
}
export default MyApp;
Next.js поддерживает SSR, и для корректной
интеграции Chakra UI необходимо правильно настроить стили, чтобы
избежать проблем с FOUC (Flash of Unstyled Content). Для этого
используется кастомный _document.js:
import { ColorModeScript } from "@chakra-ui/react"; import Document, { Html, Head, Main, NextScript } from "next/document"; import theme from "../theme"; class MyDocument extends Document { render() { return (); } } export default MyDocument;
ColorModeScript обеспечивает корректную инициализацию
темного и светлого режимов до отрисовки контента на
клиенте.
Все стандартные компоненты Chakra UI, такие как Box,
Flex, Button, Text, можно
использовать напрямую в страницах и компонентах Next.js:
import { Box, Flex, Button, Text } from "@chakra-ui/react";
export default function HomePage() {
return (
Пример использования Chakra UI
);
}
Ключевые моменты:
Flex позволяет легко управлять расположением
элементов с помощью direction, align,
justify.Box служит универсальным контейнером для отступов, фона
и тени.p, bg,
shadow, borderRadius) упрощает работу без
необходимости писать CSS.Chakra UI поддерживает динамическое переключение темного и
светлого режимов. Для этого используется хук
useColorMode:
import { Button, useColorMode } from "@chakra-ui/react";
export default function ColorModeToggle() {
const { colorMode, toggleColorMode } = useColorMode();
return (
);
}
Можно создавать кастомные темы для разных режимов,
используя объект config при расширении темы:
const theme = extendTheme({
config: {
initialColorMode: "light",
useSystemColorMode: false,
},
});
Компоненты Chakra UI полностью совместимы с Next.js динамическими страницами и SSR. Например, при рендеринге данных с API:
import { Box, Text } from "@chakra-ui/react";
export async function getServerSideProps() {
const res = await fetch("https://jsonplaceholder.typicode.com/posts/1");
const post = await res.json();
return { props: { post } };
}
export default function PostPage({ post }) {
return (
{post.title}
{post.body}
);
}
Chakra UI имеет встроенные медиа-запросы через пропсы, что идеально подходит для Next.js:
Адаптивный контейнер
base — для мобильных устройств.md, lg, xl — для больших
экранов.Next.js поддерживает динамические Layouts, и Chakra UI упрощает создание глобальных макетов:
import { Box } from "@chakra-ui/react";
export default function Layout({ children }) {
return (
{children}
);
}
В страницах можно оборачивать контент:
import Layout from "../components/Layout";
export default function AboutPage() {
return (
Страница о проекте
);
}