Существует множество статей, в которых рекомендуется использовать ngrx/effects для обработки асинхронных действий, таких как HTTP-вызовы REST. Вместо использования эффектов, почему мы не можем просто использовать обычную службу для выполнения http-вызова, а затем взять результат этого http-вызова и отправить действие? Разве это не упрощает дело?
Зачем использовать ngrx/effects для асинхронных вызовов http
Ответы (2)
Вы можете прекрасно использовать обычную службу, а затем отправлять действие, подобное этому, для компонента.
this.store.dispatch({
type: "SAVE_DATA",
payload: data
});
this.saveData(data) // POST request to server
.map(res => this.store.dispatch({type: "DATA_SAVED"}))
.subscribe()
@ngrx/effect
просто абстрагирует эту логику от компонента. Делая это с помощью функционального программного подхода (чистые функции), код остается очень легко тестируемым.
Я очень рекомендую прочитать эту статью, так как есть много решений проблем, которые злоупотребляют effects
Использование ngrx/effects делает жизнь проще, чем использование службы для выполнения http-вызова, а затем получения результата и отправки действия. Как показано ниже
Эффекты обеспечивают абстракцию уровня службы. Нашим компонентам не нужно знать о слое сервисов (http). Компоненты будут отправлять действия только для выполнения задач.
Поскольку Эффекты в основном являются сервисом, код пишется один раз и многократно используется повторно.