redux 获取ngrx选择器的当前值(不订阅)

zbdgwd5y  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(144)

我的NGRX状态是这样的
state.data 状态数据已存档
我想将数据从www.example.com复制store.data到state.dataArchived。

  1. selectedSchedulingsOnPopup$ = this.store.pipe(select(selectSchedulingsByBranch));
  2. ngOnInit() {
  3. this.store.dispatch(new GetDirectionsOnGraph({}));
  4. this.selectedSchedulingsOnPopup$.subscribe(value => {
  5. this.selectedSchedulingsOnPopupValue = value;
  6. this.store.dispatch(new GetDirectionsOnGraph(this.selectedSchedulingsOnPopupValue));
  7. });
  8. }

问题是当state.data改变时,state.dataArchived也改变
因此,我想在不订阅state.data的情况下获取它的当前值。

bpsygsoo

bpsygsoo1#

我不明白这个问题,但是如果你想在不订阅的情况下获得价值,你可以把它转换成一个承诺。

  1. async ngOnInit() {
  2. const data = await this.store.pipe(select(selectorForData),
  3. take(1)).toPromise();
  4. }

请记住,在这种承诺的方式,它只会React一次,并获得数据,并继续下去。如果你想被告知的数据切片的变化,你必须订阅它,没有其他办法。
toPromise现在标记为已弃用。您可以使用lastValueFrom将observable转换为promise,如下所示。

  1. async ngOnInit() {
  2. const data = await lastValueFrom(this.store.pipe(select(selectorForData),
  3. take(1)));
  4. }
h7appiyu

h7appiyu2#

如果您只想要第一个值,然后忽略所有后续变更,请使用first()运算子:

  1. ngOnInit() {
  2. this.store.dispatch(new GetDirectionsOnGraph({}));
  3. this.selectedSchedulingsOnPopup$.pipe(first())
  4. .subscribe(value => {
  5. this.selectedSchedulingsOnPopupValue = value;
  6. this.store.dispatch(new GetDirectionsOnGraph(this.selectedSchedulingsOnPopupValue));
  7. });
  8. }

相关问题