我将在我的项目中引入RTK Query。然而,从一个端点(用createApi
创建)检索到的数据被馈送到D3库,D3库立即开始改变数据。由于RTKQ返回不可变数据,D3抛出错误object is not extensible
。我的问题是
是否有一种方法可以禁用RTKQ对特定端点的不变性?
我明白我可以复制检索到的数据&以后再用这个副本,但我不想这样做。
注意,数据不是应用程序状态的一部分,所以我不能像文档中描述的那样使用ignoredPaths
禁用不变性。
不,绝对没有办法为单个端点禁用冻结。RTK对所有使用createSlice
制作的reducer使用Immer, RTKQ使用createSlice
生成缓存reducer,并且所有缓存数据都进入该reducer。因此,Immer将冻结所有数据。
另外,请注意,您链接的不变性检查中间件与reducer中的Immer冻结状态是不同的。
在UI层复制数据,比如在useMemo()
中,这将是你最好的选择。