Javascript 在ngrx效果中调用api后获取数据
我使用Ngrx效应从API获取数据,然后在我的组件中获取数据 组件中的Javascript 在ngrx效果中调用api后获取数据,javascript,angular,redux,ngrx,Javascript,Angular,Redux,Ngrx,我使用Ngrx效应从API获取数据,然后在我的组件中获取数据 组件中的 schedules$ = this.store.pipe(select(selectSchedulings)); ngOnInit() { this.store.dispatch(new GetSchedules()); } 在actions中,我创建了两种类型 export class GetSchedules implements Action { public readonly type = ESchedul
schedules$ = this.store.pipe(select(selectSchedulings));
ngOnInit() {
this.store.dispatch(new GetSchedules());
}
在actions中,我创建了两种类型
export class GetSchedules implements Action {
public readonly type = ESchedulesActions.GetSchedulesByDate;
}
export class GetSchedulesSuccess implements Action {
public readonly type = ESchedulesActions.GetSchedulesByDateSuccess;
constructor(public payload: ISchedules[]) {}
}
export type SchedulesAction = GetSchedules | GetSchedulesSuccess;
然后在我的特效里
export class SchedulingsEffects {
loadSchedulings$ = createEffect(() =>
this.actions$.pipe(
ofType(ESchedulesActions.GetSchedulesByDate),
mergeMap(() =>
this.apiCallsService.getSchedulings().pipe(
map(movies => ({ type: ESchedulesActions.GetSchedulesByDateSuccess, payload: movies })),
catchError(() => EMPTY)
)
)
)
);
constructor(private actions$: Actions, private apiCallsService: ApiCallsService) {}
}
我已将我的存储初始化为状态
import { ISchedules } from '../../shared/interfaces/scheduling.interface';
export interface ISchedulesState {
schedulings: ISchedules;
}
export const initialSchedulingState: ISchedulesState = {
schedulings: {
status: '',
data: [
{
..... Init values....
}
]
}
};
和减速器
export const SchedulingReducers = (
state = initialSchedulingState,
action: SchedulesAction
): ISchedulesState => {
switch (action.type) {
case ESchedulesActions.GetSchedulesByDate: {
return {
...state
};
}
case ESchedulesActions.GetSchedulesByDateSuccess: {
return {
...state
};
}
default:
return state;
}
};
当我运行我的应用程序时,我只得到Init值。我看到店内开发工具触发了api并存储了数据,但是为什么schedules$
没有得到更新
case ESchedulesActions.GetSchedulesByDateSuccess: {
return {
...state
};
}
在这里,你只是返回一个状态的范围。
您应该做的是使用操作
有效负载来更新状态(我不知道您的状态是如何构造的,但这给出了一个想法):
但是在
reducer
的GetSchedulesByDateSuccess
操作中,没有要添加到状态的有效负载,您只返回状态
对,我已经添加了有效负载,现在可以工作了,谢谢!
case ESchedulesActions.GetSchedulesByDateSuccess: {
return {
...state,
schedulings: action.payload
};
}