NGRX Ionic:createReducer 正在调用所有操作
NGRX Ionic : createReducer is calling all actions
环境:离子 6,Angular13。
场景:从分页的 1 API 获取数据。正在尝试构建另一个更改页面、引入新数据并收集所有数据的操作。
问题:在调度操作后,来自 API 的数据正常。
this.store.dispatch(UsersActions.loadFilteredUsers(请求));
在对 reducer.ts 文件声明另一个操作案例后,它是 运行 尽管没有为此调度操作。
Actions.ts 文件
export const loadFilteredUsers = createAction(
"[Fileterd Users] Load",
props<{ userFiltered: IUsersFilteredRequest }>()
);
export const loadFilteredUsersSuccess = createAction(
"[Fileterd Users] Success",
props<{ userFiltered: any }>()
);
export const loadFilteredUsersFailure = createAction(
"[Fileterd Users] Fail",
props<{ error: string }>()
);
export const loadMoreUsers = createAction(
"[Fileterd Users] Success",
props<{ userFiltered: IUsersFilteredRequest }>()
);
Effects.ts 文件
loadfilteredUsers$ = createEffect(() => {
return this.actions$.pipe(
ofType(UsersActions.loadFilteredUsers),
switchMap((data: any) =>
this.filterUserservice.filterUserOntime(data).pipe(
map((userFiltered) =>
UsersActions.loadFilteredUsersSuccess({ userFiltered })
),
catchError((error) =>
of(UsersActions.loadFilteredUsersFailure({ error }))
),
shareReplay(1)
)
)
);
});
Reducer.ts 文件
export const UsersFileterdReducer = createReducer<UsersFilteredState>(
initialState,
on(
UsersActions.loadFilteredUsersSuccess,
(state, action): UsersFilteredState => {
return {
...state,
userFiltered: action.userFiltered,
error: "",
};
}
),
on(
UsersActions.loadFilteredUsersFailure,
(state, action): UsersFilteredState => {
return {
...state,
userFiltered: [],
error: action.error,
};
}
),
on(UsersActions.loadMoreUsers, (state, action): UsersFilteredState => {
console.log("loadMoreUsers", action, "satet", state);
return {
...state,
// userFiltered: [...state.userFiltered["response"], action.userFiltered],
};
})
);
尝试添加 runtimeChacks 以实现不变性,但没有任何变化。
strictStateImmutability: true ... ect
配置 app.module.ts 和 tabs.module.ts
--------app.module.ts-------------------
StoreModule.forRoot({}),
EffectsModule.forRoot([]),
------- tabs.module.ts -------------
StoreModule.forFeature("UsersFileterdReducer", UsersFileterdReducer),
EffectsModule.forFeature([UserPersonalffects]),
当在 loadMoreUsers 的情况下添加减速器时,问题直接开始,尽管我没有为此调用任何操作,但从哪里开始。
动作由它们的类型决定。您不能使用相同的 type
字符串执行两个操作。这也是重点:动作应该是 single-source-single-goal。修改 type
字符串即可。
环境:离子 6,Angular13。
场景:从分页的 1 API 获取数据。正在尝试构建另一个更改页面、引入新数据并收集所有数据的操作。
问题:在调度操作后,来自 API 的数据正常。
this.store.dispatch(UsersActions.loadFilteredUsers(请求));
在对 reducer.ts 文件声明另一个操作案例后,它是 运行 尽管没有为此调度操作。
Actions.ts 文件
export const loadFilteredUsers = createAction(
"[Fileterd Users] Load",
props<{ userFiltered: IUsersFilteredRequest }>()
);
export const loadFilteredUsersSuccess = createAction(
"[Fileterd Users] Success",
props<{ userFiltered: any }>()
);
export const loadFilteredUsersFailure = createAction(
"[Fileterd Users] Fail",
props<{ error: string }>()
);
export const loadMoreUsers = createAction(
"[Fileterd Users] Success",
props<{ userFiltered: IUsersFilteredRequest }>()
);
Effects.ts 文件
loadfilteredUsers$ = createEffect(() => {
return this.actions$.pipe(
ofType(UsersActions.loadFilteredUsers),
switchMap((data: any) =>
this.filterUserservice.filterUserOntime(data).pipe(
map((userFiltered) =>
UsersActions.loadFilteredUsersSuccess({ userFiltered })
),
catchError((error) =>
of(UsersActions.loadFilteredUsersFailure({ error }))
),
shareReplay(1)
)
)
);
});
Reducer.ts 文件
export const UsersFileterdReducer = createReducer<UsersFilteredState>(
initialState,
on(
UsersActions.loadFilteredUsersSuccess,
(state, action): UsersFilteredState => {
return {
...state,
userFiltered: action.userFiltered,
error: "",
};
}
),
on(
UsersActions.loadFilteredUsersFailure,
(state, action): UsersFilteredState => {
return {
...state,
userFiltered: [],
error: action.error,
};
}
),
on(UsersActions.loadMoreUsers, (state, action): UsersFilteredState => {
console.log("loadMoreUsers", action, "satet", state);
return {
...state,
// userFiltered: [...state.userFiltered["response"], action.userFiltered],
};
})
);
尝试添加 runtimeChacks 以实现不变性,但没有任何变化。 strictStateImmutability: true ... ect
配置 app.module.ts 和 tabs.module.ts
--------app.module.ts-------------------
StoreModule.forRoot({}),
EffectsModule.forRoot([]),
------- tabs.module.ts -------------
StoreModule.forFeature("UsersFileterdReducer", UsersFileterdReducer),
EffectsModule.forFeature([UserPersonalffects]),
当在 loadMoreUsers 的情况下添加减速器时,问题直接开始,尽管我没有为此调用任何操作,但从哪里开始。
动作由它们的类型决定。您不能使用相同的 type
字符串执行两个操作。这也是重点:动作应该是 single-source-single-goal。修改 type
字符串即可。