Этот вопрос в первую очередь основан на мнении, но я дам вам один способ, которым это можно решить с помощью ngrx/effects
.
Чего люди часто упускают, так это того, что эффекты не должны ждать действий, При срабатывании любой наблюдаемый является допустимым источником для запуска эффекта.
Например, посмотрите на эффект ниже. Он будет выводить 0,1,2,3 ... бесконечно. Источником здесь является обычный оператор interval
из rjxs
.
timerEffect$ = createEffect(() =>
interval(1000)
.pipe(
tap((val) => {
console.log(val);
})
), {dispatch: false}
);
Возможно, вы уже видите, куда я иду с этим, но можно было бы использовать простую тему или наблюдаемый идентификатор аутентифицированных пользователей. чтобы вызвать эффекты.
loadUserData$ = createEffect(() =>
this.userId$
.pipe(
mergeMap((userId) => {
return [action1, action2, action3] // A bunch of actions that loads relevant data
})
)
);
Конечно, вы можете разделить его еще больше, но это сделает работу.
Что касается лучшей практики, я не могу сказать. Вопрос к широкой и основанной на мнениях.