TL; DR;
Идея модульного дизайна заключается в том, чтобы иметь как можно больше общих компонентов.
Эти компоненты не должны зависеть от внешнего мира (, то есть Redux Store ).
В моем понимании структура любого приложения должна быть такой:
- У вас есть компонент корневого уровня, который служит их цели.Например:
input box
- Тогда у вас есть составной компонент, который будет использовать эти корневые компоненты.Как и обработка меток ошибок вместе с вводом.
- Тогда у вас есть форма компонентов высшего порядка ( HOCs ).Это бизнес-компоненты и имеют контекст того, что происходит.Эти компоненты должны иметь доступ к хранилищу Redux.
Пример:
Позволяет создать форму с базовой информацией:
- Имя
- Фамилия
- Возраст
- Электронная почта
Для такой формы вам понадобятся следующие компоненты:
- Компонент ввода текста
- Компонент ввода чисел с логикой предотвращения / проверки текста.
Вы можете использовать textInput
для FirstName
, lastName
и email
.Поэтому, если вы напрямую привязываете его к хранилищу, вы делаете его зависимым от вашей собственной структуры редукса.Таким образом, эти компоненты нельзя использовать где-либо еще.
Следовательно, лучшая идея - создавать тупые компоненты, которые принимают реквизиты и делают свое дело.
Ваш вариант использования.
У вас есть следующие модули:
- Основной
- Чат
- FriendsList
- Друг
В будущем вы планируетедобавить еще несколько модулей:
Теперь окно чата для индивидуального, бота и группового чата будет похожено структура магазина будет сложной.Специально для группового чата.
Итак, как вы решаете, какой компонент следует связать для хранения?
Вы должны создать иерархию вложенных компонентов для просмотра и создать HOC для своих бизнес-модулей.Таким образом, ваши компоненты представления не зависят от хранилища.Ваш HOC будет предоставлять данные, и это все, что он делает.
Так что в вашем случае у вас будут следующие HOC:
- Прямой чат
- Bot Chat
- Групповой чат
- Контакты
- Панель инструментов
И вы можете иметь следующий компонент просмотра:
- Компонент чата: Используется длявсе типы чатов.
- Компонент контакта: используется для списка друзей / просмотра контактов
- Компонент списка: используется для контакта в браузере, добавления просмотра участников и управления просмотром участников.