Не понимаю неизменных объектов - PullRequest
0 голосов
/ 19 февраля 2019

Я использую Ngxs и обнаружил developmentMode.Я включил его, и у меня появились новые ошибки, которых я не понимаю.

В моем магазине есть фильтры.Я сделал функцию фасада, которая их получает и корректирует.

filterBarFiltrySnapshot(obiektId: Obiekty): any[] {
    let filtry = this.store.selectSnapshot((state: AppStateModel) => state.obiektyConfig[obiektId].filterBarFiltry);
    if (filtry) {
      filtry = filtry.map(item => {
        if (item.formValue) {
          Object.values(item.formValue).forEach(item2 => {
            item2.value = this.wstawianieWartosciService.wstaw(item2.value, obiektId);
          });
        }
        return item;
      });
    }
    return filtry;
  }

В Typescript написано, что TypeError: Cannot assign to read only property 'value' of object '[object Object]'.

Но почему?this.store.selectSnapshot возвращает массив, и не должно ли это быть в хранилище?Событие, когда я изменяю код на это:

let filtry = [
    ...this.store.selectSnapshot((state: AppStateModel) => state.obiektyConfig[obiektId].filterBarFiltry)
];

все еще есть ошибка.

Как изменить код, чтобы соответствовать неизменным ограничениям?

1 Ответ

0 голосов
/ 19 февраля 2019

Вызов store.selectSnapShot вернет состояние , а не его копию.Так что, если вы измените возвращенный объект (ы), то это нарушит неизменность состояния - вот почему вы видите ошибку, возвращаемую платформой.

Я не слишком ясно понимаю, какова функция ваших фильтровпытаясь сделать, но то, что он не может сделать, это изменить текущее состояние.Он может проецировать представление на основе значения фильтра obiektId | objectId?

Дополнительно - вот похожий вопрос Я недавно опубликовал re: состояние изменений.

Также не стоит того, чтобы в конвейере NGXS появились новые функции, облегчающие работу с неизменяемым состоянием - см. Последнюю публикацию от команды NGXS.

...