Если ваши пользовательские данные сильно меняются, можно перезагрузить. Если ваши пользовательские данные довольно статичны, как это обычно бывает, нецелесообразно совершать этот вызов несколько раз, потому что это просто делает ваше приложение медленным без причины.
Чтобы справиться с одиночной загрузкой, есть два способа:Делать это. вы должны сохранить загруженный параметр в вашей сущности, а затем при успешной загрузке установить для этого загруженного значения значение true в редукторе.
Теперь вы можете подписаться на это загруженное значение, если оно ложно, отправлять нагрузку, если оно истинно,Не отправляй звонок. Этот маршрут упрощает эффекты, но ваши контейнеры будут иметь более длинный / более уродливый код.
constructor(private store: Store<fromAuth.State & fromData.State>){
this.users$ = this.store.select(UserSelector.getAllUsers);
}
ngOnInit() {
this.store.select(UserSelector.getUsersLoaded).subscribe(value =>
if (!value) this.store.dispatch(new LoadUsers());
);
}
Более плавный способ - сохранить код как есть и выполнить эту проверку в эффекте. (ответил мне Дунканом Хантером о курсе Pluralsights на ngrx) ( Ссылка на курс ngrx по Pluralsight )
- Загрузка компонентов и подписка на магазинпеременная, в которой данные могут быть или будут.
- Отправляет действие в ngOnInit для загрузки данных.
- При проверке эффекта проверяется, есть ли в хранилище данные, и, возможно, если оно старше определенного времени,Я стараюсь изо всех сил проверять действующее хранилище как можно меньше, так как это делает их более сложными, но в реальных проектах у меня часто бывает 6-12 подобных эффектов.
- Если нет данных или устаревший вызов http, чтобы загрузитьно если он уже загружен, я отправляю действие типа {type: 'entityXLoadedFromStore'};Который ничего не делает, кроме добавления сообщения системы в систему, чтобы увидеть, что оно было загружено из магазина.
Этот маршрут обеспечивает чистоту кода в контейнерах, но усложняет эффекты.
Оба маршрута жизнеспособны, вы можете выбрать тот, который вы предпочитаете.
Я бы хотел сослаться на приложение фантастическое демо , предоставленное командой NGRX, котороеявляется отличным источником вдохновения для методов ngrx. (Однако они не обращаются к вашему вопросу там).