我在我的项目中引入了 RTK Query 。但是,从一个端点检索的数据(使用 createApi
创建)被馈送到 D3 库,该库立即开始对数据进行变异。由于 RTKQ 返回不可变数据,因此 D3 会抛出错误提示 object is not extensible
。所以我的问题是
有没有办法为特定端点禁用 RTKQ 的不变性?
我知道我可以复制检索到的数据并在以后使用该副本,但我想避免这样做。
请注意,数据不是应用程序状态的一部分,因此我无法使用 https://redux-toolkit.js.org/api/immutabilityMiddleware 中所述的 ignoredPaths
禁用不变性。
回答1
不,绝对没有办法禁用单个端点的冻结。 RTK 对使用 createSlice
制作的所有 reducer 使用 Immer,RTKQ 使用 createSlice
生成其缓存 reducer,所有缓存数据都进入该 reducer。因此,Immer 将冻结所有这些数据。
另外,请注意,您链接的不变性检查中间件与减速器中的 Immer 冻结状态不同。
在 UI 层复制数据,比如在 useMemo()
中,将是您最好的选择。