Как структурировать несколько связанных сущностей в React & Flux / Redux / Alt? - PullRequest
0 голосов
/ 23 декабря 2018

Архитектурный вопрос, который я считаю применимым к любому состоянию контейнера.Сейчас я использую Alt, раньше использовал Redux, но в целом ...

Скажем, у меня есть сообщения в блоге, пользователи и комментарии.В базе данных я сохраняю это нормализованное в виде таблицы сообщений блога, таблицы пользователей и таблицы комментариев, но у сообщений блога и пользователей могут быть комментарии, связанные с помощью таблицы объединения.

На стороне React я выполняю действияи редукторы для всех трех сущностей, BlogPostActions, BlogPostReducer и т. д. Теперь, чтобы обслуживать страницу, на которой есть BlogPosts и Комментарии, мне нужно извлечь BlogPosts, а затем получить комментарии, используя что-то вроде redux-thunk.

Теперь моя проблема - если у меня есть страница, на которой отображаются BlogPosts и Пользователи, и у них обоих есть комментарии, как мне структурировать уменьшитель / хранилище комментариев?Мое наивное решение обычно состоит в том, чтобы установить Список комментариев - результат от отправки действия.Это превращается в бесконечный цикл - BlogPosts запрашивает комментарии, пользователи запрашивают комментарии, в зависимости от того, что выигрывает, запускается изменение реквизитов и, таким образом, запускается повторное рендеринг, в результате чего все начинается заново.

Я могу вспомнить паруРешения - у меня возникает соблазн нарезать комментарии в BlogComments и UserComments, хотя избыточные документы рекомендуют это.Я бы предпочел хранить только одно хранилище комментариев, а в диспетчере действий получать только те комментарии, которые, как я знаю, я еще не получил.В конце концов, мое единственное хранилище Комментариев будет иметь все необходимые мне UserComments и BlogComments и перестанет вызывать рендеринг.Моя единственная проблема с этим в Alt, у меня, кажется, нет доступа к состоянию в моем действии, но я помню, что это было в Redux.

Какой из них более идиоматичен Flux / Redux / Alt-y

...