Вы можете сделать и то, и другое, и если вы посмотрите на приложения с открытым исходным кодом, вы, вероятно, найдете и то, и другое.
До сих пор я лично (с ngrx, но это то же самое) вводил хранилище и отправлял действия из (умных) компонентов.
Но в последнее время я читал много статей о facades
, и я думаю, что это действительно правильный способ сделать ваши компоненты как можно более простыми, но особенно упростить тестирование.
Подробнее о фасадах можно прочитать здесь:
https://medium.com/@thomasburleson_11450/ngrx-facades-better-state-management-82a04b9a1e39
https://medium.com/default-to-open/understanding-a-large-scale-angular-app-with-ngrx-80f9fc5660cc
https://blog.nrwl.io/nrwl-nx-6-2-angular-6-1-and-better-state-management-e139da2cd074
Как уже говорилось, вы можете сделать и то, и другое - вот более ранний вопрос, который я опубликовал с ответом от одной из команды NGXS.
В нашем проекте мы следовали этому шаблону, отправили действие, чтобы обработчик действия состояния вызывал службу, а затем исправлял состояние результатом. И при необходимости отправьте дальнейшие действия, чтобы указать на успех или неудачу.
Я считаю, что Dispatched Action должен быть неизменным и не должен использоваться для возврата результата. Вместо этого клиент, заинтересованный в получении результата (обычно в изменении состояния, вызванном действием), должен подписаться на изменение состояния. Обратите внимание, что NGXS - это реализация CQRS.