angular - 避免使用 if 语句 NgRx Store
问题描述
我想在我在 Angular 中创建的组件中获取一个状态对象。但是,该值始终未正确加载且未定义。为什么会出错?如果我使用 if 语句,该方法工作正常,但我不明白为什么会出错。我怎样才能正确加载它?
const initialState: any = {
id: 'campaignID1',
name: 'Campagne 1'
};
export function reducer(state: Campaign = initialState, action: CampaignActions.Actions) {
switch (action.type) {
case CampaignActions.CHANGE_CAMPAIGN:
return {
id: action.payload.id,
name: action.payload.name
};
}
}
活动.reducer.ts
export const CHANGE_CAMPAIGN = '[Campaign] Change';
export class ChangeCampaign implements Action {
readonly type = CHANGE_CAMPAIGN;
constructor(public payload: Campaign) {
}
}
export type Actions = ChangeCampaign;
活动.action.ts
ngOnInit() {
this.store.pipe(select('campaign')).subscribe(x => {
if (x === undefined) { <------ THIS SHOULD BE UNNECESSARY
} else {
const params = new HttpParams()
.set('campaignId', x.id);
this.resourceService.list(params, '/campaign').subscribe(resources => {
this.resources = resources;
});
}
});
}
活动.component.ts
解决方案
发生这种情况是因为在未知操作 [或默认] 的情况下您没有返回初始状态。如果采取行动,您应该返回初始状态default
。像这样改变你的减速器:
export function reducer(state: Campaign = initialState, action: CampaignActions.Actions) {
switch (action.type) {
case CampaignActions.CHANGE_CAMPAIGN:
return {
id: action.payload.id,
name: action.payload.name
};
default:
return state;
}
}
希望能帮助到你。
推荐阅读
- java - 使用 Java 进行安全用户身份验证
- amazon-web-services - 有没有办法在 AWS ECS 中设置 DNS 选项?
- react-native-maps - 所有 firebase 库必须高于或低于 14.0.0 (react-native-maps & react-native-firebase)
- scala - 字符串在 Scala 中被错误地解析为日期时间格式
- angular - 为什么 Angular 调用我的函数……几十次?
- jenkins - 在多个阶段之间重用 Jenkins 中的代理(docker 容器)
- ssl - 旧 TLS1.0 客户端无法连接到自定义域上的 Google App Engine
- c++ - 在静态库(C++、Eclipse CDT)中使用#ifdef
- networkx - 如何更改使用 holoviews/bokeh 绘制的 networkx 图中的颜色?
- c++11 - c++ popen 使应用程序停止 30 秒