Изучаю React.js + Redux, прошу советов по организации приложения
Изучаю React.js, в процессе возникли вопросы, не дающие покоя. Надеюсь, кто-то сможет подсказать. Конкретного кода не привожу, т.к. вопросы касаются организационного характера.
Существует некое комплексное веб приложение, рассмотрим только одну его часть:
Есть раздел с некоторыми элементами, у элементов есть стандартные поля (id, имя, слаг ...), а так же категория. Приложение должно выводить список всех элементов, список элементов по категории, и отдельный элемент. При этом, есть определенные маршруты для этих страниц:
/list - все элементы
/list/{ category_slug } - список элементов по категории
/list/{ category_slug }/{ item_slug } - страница элемента
Я более-менее разобрался с Redux, как работаю экшны, редьюсеры, как подписывать компоненты на изменения в стор. Вопрос только, как это все лучше организовать?
Что стоит подписывать на изменения стора? Глобальный для всего приложения компонент App, и потом ко всем потомкам пробрасывать нужные экшны и пропсы (между глобальным компонентом и целевым может оказаться 3-4 промежуточных компонента), или лучше подписывать конкретные страницы (страница списка, страница элемента)?
Как лучше организовать выборку по категориям? Получить сразу все категории, а потом фильтровать? Опять же, все сразу получаться не будут, т.к. будет подгрузка по скроллу.
Как лучше представить страницу элемента? Сделать общий объект для одного элемента и каждый раз изменять в нем данные, получая новые поля элементов при переходе на на страницы других элементов (т.е. при заходе на страницу делаем запрос к api и обновляем объект новыми данными), или дополнять значениями существующий массив элементов, полученный для отображения списка (так же делаем запрос к api, но при этом не затираем значения единственного объекта, а дополняем конкретный объект в массиве новыми полями)?
Когда лучше всего вызывать экшн на получение данных? Получаю в componentDidMount, но не уверен, что это правильно. Может лучше в конструкторе?
До этого не было опыта работы с одностраничными приложениями, поэтому не все еще понятно.
Надеюсь на помощь, спасибо!
|