Angular ngrx: TypeError: невозможно заморозить представления буфера массива с элементами

У меня проблема с ngrx. У меня есть массив в моем состоянии, к которому я хочу добавить объекты. Это действительно отлично работает, если я console.log их, я вижу эти значения в моем магазине. Но инструменты redux dev и консоль выдают ошибку TypeError: Невозможно заморозить представления буфера массива с элементами.

У меня состояние выглядит так:

const state: State = {
  array: []
};

Объект, который я передаю своим действиям, выглядит примерно так:

const obj = {attr: number, data: ImageData};

Где ImageData берется из Canvas и извлекается с помощью canvas.getContext("2d").getImageData(...);. Следует отметить, что этот объект огромен и содержит более 69000 ключей со значениями от 0 до 255 (RGBA).

И я добавляю новый объект в состояние / хранилище следующим образом:

createReducer(
  initialState,
  on(action, (state: State, action)=> {
    return {
      ...state,
      array: [...state.array, action.payload]
    }
  })
);

Кроме того, я прочитал, что я должен глубоко копировать объекты, прежде чем передавать их в действие, поэтому я сделал это с lodashs copyDeep(), но получил те же результаты.

Любая помощь приветствуется.


person main.c    schedule 26.06.2020    source источник
comment
Единственная причина, по которой вам может потребоваться глубокое клонирование объекта, заключается в том, что оригинал каким-то образом будет видоизменен. В противном случае это бессмысленные накладные расходы.   -  person Adrian Brand    schedule 26.06.2020


Ответы (1)


Вам нужен state.array в вашем редукторе.

return {
  ...state,
  array: [...state.array, action.payload]
}
person Adrian Brand    schedule 26.06.2020
comment
Спасибо за ваши усилия, но у меня это уже есть в моем коде, я просто ошибся в вопросе. Мне жаль - person main.c; 26.06.2020