我遇到了一个ngrx的问题。我有一个数组在我的状态,我想追加对象。这实际上工作正常,如果我console.log他们,我可以看到我的存储中的值。但redux开发工具和控制台抛出错误"TypeError:无法冻结具有元素""的数组缓冲区视图。
我有一个如下所示的状态:
const state: State = {
array: []
};
我传递给我的动作的Object看起来类似于:
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]
}
})
);
此外,我读到在将对象传递给操作之前应该进行deepCopy,所以我使用了lodash copyDeep()
,但得到了相同的结果。
任何帮助都很感激。
4条答案
按热度按时间fafcakar1#
你需要在你的reducer中加入状态数组。
42fyovps2#
我遇到了同样的问题,我通过克隆传递给调度方法的数据来解决它
例如:
我尝试过的另一个选项是将ngrx配置中的属性值"strictActionImmutability"从true更改为false
e37o9pze3#
我使用Angular ,遇到了该错误。
对我来说,在调度工作之前深度复制数组
我知道这不是最好的解决办法。
编辑:不幸的是,这个解决方案没有什么帮助,因为数组中的对象在被strigified时会失去功能......所以回到原点
ryevplcw4#
您可以使用此代码。这将复制整个对象,以便删除依赖项。
有关详细信息:Object.assign()