2016-09-15 6 views
1

Поэтому я хотел бы использовать эти три технологии. Моя идея состоит в том, чтобы иметь редуктор, который обрабатывает все мои сущности, чему способствует нормализация.Структурирование redux, redux-saga и normalizr

перевождь-сага будет слушать ENTITIES_REQUESTED действий, запустить сагу, которая запрашивает сущность, и делает ENTITIES_RECEIVED действия, которое будет обрабатываться с помощью редуктора, который вызывает normalizr и хранит объекты в срезе entities.

Для удаления объекта необходимо выполнить две вещи: объект должен быть удален из состояния, и должен произойти побочный эффект, который удалит объект с сервера (боковая точка: я знаю, что некоторые утверждают, что удаление из состояние также побочный эффект, но я не думаю, что саунд-редукция работает над этим понятием).

Так что у меня может быть действие ENTITY_REMOVED, которое удалит сущность из состояния, и сага, слушая это, что будет обрабатывать вызов api.

Теперь предположим, что у меня есть таблица с функцией массового удаления для таблицы. Таблица «приведена в действие» редуктором, который принимает действие DATA_OPTIONS_SET. Редуктор обновляет такие вещи, как текущая страница, фильтры и т. Д. Также будет звучать сага об этом и вызывает API для возврата нового набора данных.

Я хотел бы иметь функцию массового удаления, которая на высоком уровне удаляет все сущности, и когда это будет сделано, обновите таблицу.

Если я зацикливаюсь над сущностями для удаления и отправляю действие ENTITY_REMOVED, я не буду знать, когда эти удаления будут выполнены, чтобы я мог обновить таблицу.

Если я вручную вызываю сагу, которая удаляет сущности, ENTITY_REMOVED никогда не будет отправлен, поэтому сущность не будет удалена из магазина.

Означает ли это, что моя архитектура неправильная, и я где-то ошибся?

ответ

0

Я хотел бы подойти проблему следующим образом: создать удалить сагу, которая будет

  1. Подождите ENTITIY_REMOVE_REQUEST действия с идентификатором в качестве параметра
  2. вызова соответствующей конечной точки, чтобы удалить объект из сервера
  3. If апи вызов было успешно отправлено действие ENTITY_REMOVED, которое удалит объект из состояния.

Конечно, это не единственный вариант, и многие детали будут зависеть от того, как создается ваш api. Вместо того, чтобы удалять каждый объект вручную в пункте 3., вы можете отправить действие, которое будет извлекать все сущности с сервера и обновить ваше состояние с новым списком сущностей, или вы могли бы объединять и передавать все объекты, которые необходимо удалить в одном апи звоните в пункт 2.

+0

Что мне не нравится в ENTITY_REMOVE_REQUEST, так это то, что это действие без смысла с точки зрения состояния приложения. Цель - начать побочный эффект, который мне кажется неудобным. – blockhead

+0

в терминах состояния приложения представляет собой последовательность действий (или вычислений), которые могут потерпеть неудачу. Поскольку вы хотите обновить свое состояние, только если сетевой запрос на сервер будет успешным. Если вы не проверяете успешность работы в сети, ваше состояние приложения может отличаться от состояния на сервере.Я думаю, что такая организация ведет к совершенно ясным сагам, однако, если вы найдете лучшее решение, я с удовольствием узнаю – MadNat

+0

Я думаю, что сага может справиться с неудачной ситуацией, просто испустив компенсирующее действие, если что-то пошло не так. – blockhead