我有一个从react钩子获取用户令牌的服务,所以我不能直接在Redux Toolkit Query(RTKQ)API中使用该服务。因此,我尝试使用组合,并在稍后调用突变时传递服务。
是否可以将服务作为参数传递给RTKQ函数?
我试过这么做。它工作,但我得到一个错误日志,说一个不可序列化的数据存储在状态。
我的例子突变:
removeItemById: builder.mutation<void, {service: ItemService; uuid: string}>({
invalidatesTags: ['Beneficiaries'],
queryFn: async ({ service, uuid }) => {
const result = await service.remove(uuid);
return { data: result };
},
})
使用方法:
const [remove, { isLoading, isError, isSuccess }] = useRemoveItemByIdMutation();
const handleRemove = () => {
remove({service: itemService, uuid});
};
错误类型:
A non-serializable value was detected in the state, in the path: `item.queries.getItems({}).originalArgs.add`
1条答案
按热度按时间rdlzhqv91#
问题是
service
作为一个函数,是一个不可序列化的值。如果您使用的是查询而不是变化,则可以在端点上使用serializeQueryArgs属性。根据文档,突变似乎不允许这样做。
我的建议是创建并导出一个“services”对象,该对象将您希望从API切片调用的各种服务打包起来,并提供
service
作为查找键。范例: