React/Reduct Структура директорий компонентов, как их располагать в папках
Primary tabs
Главная идея
Основные мысли:
- Держать в отдельной директории универсальные компоненты, которые переиспользуются или могут быть переиспользованы в будущем и не завязаны на редакс разделить компоненты, не завязаны на Redux
- В директории бизнес-компонентов, на первом уровне должны быть только те элементы, которые упомянуты в основном ReactRouter.
- Рядом с бизнес-компонентом могут быть поддиректории с его зависимостями (где лежат те компоненты, для которых он выполняет import, но они при этом не рассматриваются как универсальные), как сами по себе, так и внутри директории includes/ или ее эквивалента
+ в целом во всех поддиректориях бизнес-компонентов, страться не держать слишком много элементов на одном уровне.
Подробности ниже.
Для начала приведем примерную схему диретокрий и файлов приложения:
. . ├── node_modules ├── src/ │ ├── app/ │ │ ├── components/ // директория компонентов │ │ └── index.ts // список основных машрутов (ReactRouter) │ ├── helpers/ │ ├── constants/ │ ├── otherInSrc/ │ └── index.ts // точка входа └── packase.json
Далее рассмотрим именно структуру папки components/, которая содержит все (условно) компоненты реакт, относящиеся к нашему приложению.
Структура директории components/
Идея следующая:
.
├── components/ │ ├── universal/ // универсальные, без привязки к Redux │ ├── includes/ // зав. от Redux, для import-а на текущем уровне или ниже │ └── pages/ // элементы из "Основной ReactRouter"/ │ ├── main/ │ ├── article/ │ └── about/ └── index.ts // Основной ReactRouter
-- т.е.:
- В
components/на первом уровне есть три директории (кроме index.ts, где используется ReactRouter):universal/-- универскальные компоненты, которые можно переиспользовать по всему приложению (напр. стилизованные инпуты и т.д.)includes/-- диретория для блоков, завязанных на бизнес логику и состояние приложения (на Redux), т.е. тут используются селекторы и/или диспетчеризируется что-то в хранилище.
pages/ -- фактически в этой директории лежат (непосредственно или в во вложенных директориях, как на схеме выше )страницы приложения (компоненты-страницы), в пример выше это директории:├── main/ ├── article/ └── about/
именно на них ссылкается ReactRouter из index.ts.
Компоненты-страницы (pages/), могут делать import:
- Из
components/universal/ - Из
components/includes/ - Из собственной директории includes/ или директорий includes/ других уровней
Таким образом, более подробно структара директорий страниц может быть предствлена как-то так:
components
universal/
includes/
pages/
main/
includes/
index.ts // <Main/>
article/
includes/
index.ts // <Article/>
about/
includes/
index.ts // <About/>
index.ts // Основной ReactRouter
Альтернатива includes/
Вместо имени "includes"(как на этом уровне, так и ниже по дереву):
- мы можем использовать любое другое объединяющее имя, подходящее по смыслу в данной директории, напр. common/ или containers/
- использовать сразу же на этом уровне несколько поддиректорий для включаемых компонентов, не объединяя их в общую папку ( с названием inculdes или иным, см. пред. пункт)
-- с учетом этого замечания приложение может иметь вид:
components
universal/
containers/ // containers вместо includes, внутри компоненты <PrivateRouter/> <CommonRouter/>
pages/
main/
includes/ // просто includes
index.ts // компонент <Main/>
article/
common/ // common вместо includes
index.ts // компонент <Article/>
about/ // about будет без объекдиняющей includes/
contacts/ // внутри компонент <ContactsList/>
mapBlock/ // внутри компонент <ContactsMap/>
index.ts // компонент <About/>
index.ts // Основной ReactRouter
- Log in to post comments
- 1983 reads