英文:
Is it possible to pass queryFn to useQuery?
问题
我的queryFn是从上下文中获取的,尽管听起来很愚蠢:
```typescript
const fetch = useAppFetch()
由于历史原因,我不能更改这个,所以我想知道在使用时是否可以传递queryFn?
const fetch = useAppFetch()
const { data } = useDynamicQuery(
{ ...args },
{ queryFn: React.useCallback((args) => fetch(args), [fetch]) }
})
<details>
<summary>英文:</summary>
As stupid as it sounds, my queryFn is taken from the context:
```typescript
const fetch = useAppFetch()
I can't change this for historical reasons, so I'm wondering if it's possible to pass in queryFn when using it?
const fetch = useAppFetch()
const { data } = useDynamicQuery(
{ ...args },
{ queryFn: React.useCallback((args) => fetch(args), [fetch]) }
})
答案1
得分: 1
这是一个奇怪的设计模式,但有时我们必须使事情正常工作。
根据您的评论,似乎您已经找到了实现方式:
> @Philisonstrike 是的,我尝试将queryFn作为参数传递,但是我收到了一个警告:“在状态中检测到了一个非可序列化的值”,这个方法可以工作,但似乎不是推荐的方式。
我不太理解的是,您是如何在状态中得到一个非可序列化的值的。您的操作中不可避免地会有一个非可序列化的值,但这不是问题(它由thunk
中间件解决)。
您是否以某种方式将queryFn
参数存储在状态中?serializeQueryArgs
API选项的默认实现应该已经处理了它的移除。我能想象到的唯一可能原因是,如果您已经设置了自己的serializeQueryArgs
选项,并且它没有对所有内容进行序列化。
更有可能的情况是,queryFn
本身以非可序列化的格式返回其数据。如果是这样,那么您奇怪的设置可能是问题的根本原因。
您需要追踪下非可序列化值的详细信息,然后从那里解决问题。
您还没有展示您的实现,所以我不知道可能发生的问题是什么。
英文:
It's a bizarre design pattern but sometimes we've got to make things work.
It seems like you figured out the implementation, based on your comment:
> @Philisonstrike Yes, I've tried passing queryFn as a parameter, but I get a warning: "A non-serializable value was detected in the state" , which works, but doesn't seem to be the recommended way.
What I'm not understanding is how you are getting a non-serializable value in your state. You will inevitably have a non-serializable value in your action but that's not a problem (it's solved by thunk
middleware).
Are you are storing the queryFn
argument in the state somehow? The default implementation of the serializeQueryArgs
API option should have handled removing it. The only way I can imagine this being the cause is if you're already setting your own serializeQueryArgs
option and it's not serializing everything.
It seems more likely that the queryFn
itself is returning its data in a non-serializable format. In which case your bizarre setup it's really the culprit.
You need to track down the details of where and what this non-serializable value is and go from there.
You haven't shown your implementation so I don't know what issues might be occurring there.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论