我已经在在线课程的帮助下创建了一个reducer函数,但是它不能完全满足我的要求。
这是我按下列表中的3辆车后显示的控制台窗口。蓝色数字是ID,当我按下列表中的对象时,它就会触发。
现在,它首先返回“上一个”对象”,这是我第一次按下时的一个空数组,然后几秒钟后,它返回了我按下的对象。
我的代码如下:
// initial state
export const initialState: VehicleDetailState = {
entities: [],
loaded: false,
loading: false
};
// my reducer
export function reducer(
state = initialState,
action: fromVehicleDetail.VehicleDetailAction
): any {
switch (action.type) {
case fromVehicleDetail.LOAD_VEHICLEDETAIL_SUCCESS: {
const vehicledetail = action.payload;
const entities = vehicledetail;
return {
entities
};
}
}
return state;
}
在“ LOAD_VEHICLEDETAIL”的情况下,我尝试返回不同的内容,但是,每当尝试执行此操作时,都会由于该部分代码而返回错误:
// my listcomponent
onClick() {
this.store.select(fromStore.getAllVehicleDetail).subscribe(data => {
this.vehicleDetail = data;
console.log(this.vehicleDetail);
if (this.vehicleDetail.position) {
this.setMap();
this.setMarkers();
return;
}
this.failSetMap();
this.setMarkers();
});
this.store.dispatch(new fromStore.LoadVehicleDetail());
}
}
(console.log(this.vehicleDetail)是在控制台窗口中记录的内容。
错误所在
TypeError:无法读取未定义的属性“位置”
我该怎么做才能只返回列表中最近按下的对象?
答案 0 :(得分:0)
您点击订阅。这意味着,您的观察员会在商店开始和每次更改时被触发。您不应该点击订阅。在初始化时订阅,在点击时发送。
onInit() {
this.store.select(fromStore.getAllVehicleDetail).subscribe(data => {
this.vehicleDetail = data;
console.log(this.vehicleDetail);
if (this.vehicleDetail.position) {
this.setMap();
this.setMarkers();
return;
}
this.failSetMap();
this.setMarkers();
});
}
}
onClick() {
this.store.dispatch(new fromStore.LoadVehicleDetail());
}
在此代码段中,观察者订阅了init。每次商店更改时,都会触发观察者。单击添加新的车辆。单击后,将创建新的车辆并将其添加到商店。然后更改商店并触发观察者。