значение магазина не меняется ngrx - PullRequest
0 голосов
/ 03 июня 2019

У меня есть следующая структура

export interface MyStructure {
  id: string
  values: Array<MyObject>
}

В моем магазине есть действие, которое вызывает следующее

const ADD_OBJECT= (state: State, action: featureAction.AddObject) => {
  const vals= state.entities[action.payload.objId].values;
  vals.concat(action.payload.newObj);
  return featureAdapter.updateOne({
    id: action.payload.routeId,
    changes: {
      waypoints : [...vals]
    },
  }, state);
};

, но это никогда не обновляет мой магазин ...

Я также пытался

    changes: {
      waypoints : new Array<MyObject>
    }

, единственный способ, которым я сделал это, был

const ADD_OBJECT= (state: State, action: featureAction.AddObject) => {
  const obj = {...state.entities[action.payload.objId]};
  obj.values= [...obj .values, ...[action.payload.newObj]];
  return featureAdapter.updateOne({
    id: action.payload.objId,
    changes: obj ,
  }, state);
};

, но это излишне, поскольку все обновляется, не могу ли я просто обновить массив?

1 Ответ

0 голосов
/ 03 июня 2019

Переменная vals здесь const vals= state.entities[action.payload.objId].values; ссылки на объект из State.Так что vals.concat(action.payload.newObj); мутирует этот Объект.

Вы не должны мутировать State .

И это const obj = {...state.entities[action.payload.objId]}; работает, потому что spreed создает новый объект (новую ссылку).Затем NgRx фиксирует изменение ссылки и обновляет состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...