我可以将对象及其方法存储在@ngrx 中吗
Could I store object with its methods in @ngrx
我想用 @ngrx/entity 存储对象及其方法。它会在应用程序中引起任何问题吗? (Angular 2-7)
mission.class.ts:
import { v4 as uuid} from 'uuid';
export class Mission {
id: string;
title: string;
completed: boolean;
constructor (missionTitle: string, completed?: boolean) {
this.id = uuid();
this.title = missionTitle;
this.completed = completed;
}
complete() {
this.completed = true;
}
}
有 class with method 'complete' 任务。我想保存@ngrx/entity.
missions.actions.ts:
export enum MissionActionTypes {
AddMission = '[Mission] Add Mission'
}
export class AddMission implements Action {
readonly type = MissionActionTypes.AddMission;
constructor (public payload: { mission: Mission }) {}
}
有将任务对象及其方法添加到@ngrx/store
的操作
missions.reducer.ts:
export interface MissionsState extends EntityState <Mission> {
}
export const adapter: EntityAdapter <Mission> = createEntityAdapter<Mission>();
export const initialState: MissionsState = adapter.getInitialState();
export function reducer(state = initialState, actions: MissionActions) {
switch (actions.type) {
case MissionActionTypes.AddMission:
return adapter.addOne(actions.payload.mission, state);
default:
return state;
}
}
当我使用 select() 从商店获取 Mission 对象时,我可以调用它的 'complete' 方法。但是我不确定这种方法是否会在将来的应用程序中引起任何问题..
是的,这是可能的,但这并不意味着您应该这样做。
- 动作应该是可序列化的(方法在序列化过程中丢失)
- 选择器应该是纯的(它不应该调用副作用,它应该只从状态中读取日期)
我想用 @ngrx/entity 存储对象及其方法。它会在应用程序中引起任何问题吗? (Angular 2-7)
mission.class.ts:
import { v4 as uuid} from 'uuid';
export class Mission {
id: string;
title: string;
completed: boolean;
constructor (missionTitle: string, completed?: boolean) {
this.id = uuid();
this.title = missionTitle;
this.completed = completed;
}
complete() {
this.completed = true;
}
}
有 class with method 'complete' 任务。我想保存@ngrx/entity.
missions.actions.ts:
export enum MissionActionTypes {
AddMission = '[Mission] Add Mission'
}
export class AddMission implements Action {
readonly type = MissionActionTypes.AddMission;
constructor (public payload: { mission: Mission }) {}
}
有将任务对象及其方法添加到@ngrx/store
的操作missions.reducer.ts:
export interface MissionsState extends EntityState <Mission> {
}
export const adapter: EntityAdapter <Mission> = createEntityAdapter<Mission>();
export const initialState: MissionsState = adapter.getInitialState();
export function reducer(state = initialState, actions: MissionActions) {
switch (actions.type) {
case MissionActionTypes.AddMission:
return adapter.addOne(actions.payload.mission, state);
default:
return state;
}
}
当我使用 select() 从商店获取 Mission 对象时,我可以调用它的 'complete' 方法。但是我不确定这种方法是否会在将来的应用程序中引起任何问题..
是的,这是可能的,但这并不意味着您应该这样做。
- 动作应该是可序列化的(方法在序列化过程中丢失)
- 选择器应该是纯的(它不应该调用副作用,它应该只从状态中读取日期)