Подтвердить что ты не робот

Redux vs services в Angular 2

Я хочу убедиться, что я правильно понял Redux. Я понимаю, что он сохранит полное состояние приложения (включая все подсистемы), такие как модели всех компонентов и кэш-данных извлеченных данных и пользовательских данных. Означает ли это, что я никогда не должен использовать сервис для загрузки/сохранения состояния компонента с помощью идентификатора модели?

Я делаю приложение для викторины, которое состоит из таких компонентов, как Quiz, Category, Question and Choice. В настоящее время каждый компонент вызывает веб-API для извлечения данных и поддерживает его собственное состояние самостоятельно или с помощью службы, которая отслеживает все по полям id.

У меня есть выделенный сервис под названием AnswerService для поддержания состояния выбранных вариантов, где каждый компонент Choice получает его состояние при визуализации.

Выполняется ли миграция в Redux, все это будет перемещено в хранилище, и практически все службы будут неактивными и будут отправляться непосредственно для хранения, и, соответственно, все модели компонентов подписаны из хранилища?

4b9b3361

Ответ 1

"Выполняется ли переход к Redux, все это будет перемещено для хранения"

Нет.
Если вы используете ngrx, лучшим способом справиться с этим будет ngrx/effects. Это сопутствующая библиотека, которая должна быть "местом для размещения вашего асинхронного кода" или, другими словами, местом для выполнения побочных эффектов. Поэтому, когда компонент хочет получить новые данные, он отправит действие "GET_DATA", и это будет обработано как ngrx @Effect. Внутри вашего эффекта вы можете использовать свой собственный сервис, чтобы вызывать и извлекать данные (поэтому ваши асинхронные службы, вероятно, прекрасны, и их можно просто немного изменить). Затем вы возвращаете действие, содержащее новые данные обратно в редуктор, который обновляет состояние с новыми данными. Ваш компонент подписывался на хранение все время, поэтому, когда состояние обновляется редуктором, компонент знает об этом изменении и может автоматически обновлять его собственное локальное состояние.

Ответ 2

Спасибо за ваш вопрос. Я столкнулся с той же дилеммой. То, как я действительно отвечал на данный момент, заключается в том, что у меня все еще будут проверенные службы для инкапсуляции операций изменения состояния, выполняемых функцией "сокращение". На мой взгляд, эта функция redux с огромным выражением if, который вы видите в базовых примерах сокращения, - это только начало... Наверное, никто не будет кодировать это по-настоящему в большом приложении.... Я бы сказал, однако, что хорошая идея иметь этот промежуточный посредник, который ловит и отправляет любое событие, изменяющее состояние, в соответствующую службу. Не уверен, что если мы хотим, чтобы только чтение было инкапсулировано в сервисе... может быть, нет.. но это будет другое обсуждение.