У меня есть приложение, использующее NGRX.
У меня вопрос, я знаю, что магазин - это место, доступное только для чтения, где вы не можете напрямую изменять объект. Но когда я использую селектор
Например, если у меня есть следующий селектор ngrx
export const getSelectedMission = (state: State): Readonly<IMission> => state.selectedMission;
export const selectedMission: MemoizedSelector<object, Readonly<string>> = createSelector(
selectMissionState,
getSelectedMissionId
);
Если в моем приложении я делаю это
this.store$.pipe(select(MissionsStoreSelectors.selectedMission)).subscribe((mission) => mission.name = "123")
Это допустимая операция ? или этого следует избегать?
Если я хочу выбрать часть в магазине и иметь возможность редактировать это значение (чтобы снова отправить действие в магазине), каков будет лучший способ? Должен ли я сделать так, чтобы весь мой селектор возвращал копию объекта / массива?
EDIT:
Это нормально, но только если вы делаете копию объекта.
Что, если я сделаю это в компоненте:
this.selectedMission$ = this.store$.pipe(select(MissionsStoreSelectors.selectedMission))
Затем в шаблоне я передаю это значение дочернему элементу
<app-child [mission]="selectedMission$ | async"></app-child>
И в дочернем элементе я так в какой-то момент
mission.name = "123"
Это отредактирует прямую ссылку на значение в магазине, верно? но дочерний компонент не должен заботиться о создании копии объекта перед его изменением.