【发布时间】:2020-11-03 15:48:41
【问题描述】:
我正在使用 Angular NgRX。我还在学习 NgRX。在下面的代码中。我正在使用选择器从商店中获取状态切片。如果数据未定义或长度等于 0,则调用 dispatch,然后转到 DB 获取数据。
我的问题是:这是正确的方法吗?或者如果存储切片未定义,NgRX Effects 是否应该处理访问 API 的逻辑?
在下面的代码中,如果我不订阅选择器并检查它,那么它每次都会调用 API 端点,这违背了使用状态存储的目的,是吗?
import { Component, OnInit, OnDestroy } from '@angular/core';
import { select, Store } from '@ngrx/store';
import { Observable, Subscription } from 'rxjs';
import { tap } from 'rxjs/operators';
...
@Component({
selector: 'my-pro',
templateUrl: './my-pro.component.html',
styleUrls: ['./my-pro.component.scss'],
})
export class MyProxyComponent implements OnInit, OnDestroy {
myProxyList$ = this.store.select(getProxyList);
subs: Subscription;
searchCriteria = {
standardId: 'mka',
start: 1,
end: 25,
};
constructor(
private store: Store<State>,
) {
}
ngOnInit(): void {
this.getMyProxy();
}
ngOnDestroy(): void {
this.subs.unsubscribe();
}
getMyProxy(): void {
this.subs = this.myProxyList$.subscribe(
data => {
console.log('myProxyList', data);
// if length is 0, goto the db
if (data === undefined || data.length === 0) {
// ngrx action to call api
this.store.dispatch(ProxyActions.getAllProxyList({ searchCriteria: this.searchCriteria }));
}
}
);
}
}
【问题讨论】: