Chakra UI — это модульная библиотека компонентов для React, ориентированная на быструю разработку интерфейсов с минимальной настройкой CSS. Организация структуры файлов проекта играет ключевую роль в поддерживаемости и масштабируемости приложения. Ниже рассмотрены основные подходы к структурированию проекта с Chakra UI.
Типичная структура проекта с Chakra UI выглядит следующим образом:
my-app/
├── node_modules/
├── public/
├── src/
│ ├── components/
│ ├── hooks/
│ ├── theme/
│ ├── pages/
│ ├── utils/
│ ├── App.js
│ └── index.js
├── package.json
└── README.md
componentsВсе переиспользуемые UI-компоненты следует помещать в папку
components. Для каждого компонента рекомендуется создавать
отдельную подпапку с файлами:
components/
├── Button/
│ ├── Button.js
│ └── Button.styles.js
├── Header/
│ ├── Header.js
│ └── Header.styles.js
extendTheme или
useStyleConfig).Такое разделение позволяет легко управлять стилизацией компонентов, избегая смешивания логики и UI.
themeДля централизованного управления цветовой палитрой, типографикой,
размерами и кастомными компонентами используется папка
theme:
theme/
├── index.js
├── foundations/
│ ├── colors.js
│ ├── typography.js
│ └── breakpoints.js
└── components/
├── Button.js
└── Input.js
Пример подключения темы:
import { extendTheme } from "@chakra-ui/react";
import foundations from "./foundations";
import components from "./components";
const theme = extendTheme({
...foundations,
components,
});
export default theme;
pagesЕсли используется React Router или Next.js, каждая страница хранится в отдельной подпапке с компонентом страницы и опциональными вспомогательными файлами:
pages/
├── Home/
│ ├── Home.js
│ └── Home.styles.js
├── About/
│ ├── About.js
│ └── About.styles.js
Это позволяет изолировать логику страницы и её стили, делая проект более структурированным и удобным для командной работы.
hooksДля кастомных React-хуков, связанных с управлением состоянием, API-запросами или эффектами, выделяется отдельная папка:
hooks/
├── useAuth.js
├── useFetch.js
└── useForm.js
Использование хуков упрощает переиспользование логики между компонентами.
utilsУтилитарные функции, константы, обработчики форматов и
вспомогательные методы удобно хранить в utils:
utils/
├── formatDate.js
├── validateEmail.js
└── constants.js
Это минимизирует дублирование кода и делает проект более поддерживаемым.
App.js и index.jsimport React from "react";
import ReactDOM from "react-dom";
import { ChakraProvider } from "@chakra-ui/react";
import App from "./App";
import theme from "./theme";
ReactDOM.render(
<ChakraProvider theme={theme}>
<App />
</ChakraProvider>,
document.getElementById("root")
);
import React from "react";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Home from "./pages/Home/Home";
import About from "./pages/About/About";
function App() {
return (
<Router>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
}
export default App;
theme/foundations для единообразия.Такое структурирование обеспечивает чистоту кода, упрощает масштабирование проекта и интеграцию с Chakra UI, позволяя создавать масштабируемые интерфейсы с предсказуемой стилевой системой.