Могу ли я сохранить объект с его методами в @ngrx - PullRequest
0 голосов
/ 04 декабря 2018

Я хотел хранить объекты с их методами с помощью @ ngrx / entity.Это может вызвать проблемы в приложении?(Угловой 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;
  }
}

Есть класс с методом 'полная' миссия.Я хочу сохранить его с помощью @ 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 (), я могу вызвать его «полный» метод.Но я не уверен, что этот подход вызовет какие-либо проблемы в приложении в будущем ..

1 Ответ

0 голосов
/ 05 декабря 2018

Да, это возможно, но это не значит, что вы должны.

  • Действия должны быть сериализуемыми (методы теряются во время сериализации)
  • Селекторы должны быть чистыми (не должновызвать побочный эффект, он должен только читать дату из государства)
...