You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在useInfiniteQuery中传递多个参数(如groupId)?

解决useInfiniteQuery传递多个参数的问题

问题原因

你直接调用listofSessions({groupId})会立即执行函数并返回一个Promise,但useInfiniteQuery的第二个参数要求传入一个函数(queryFn),而非Promise实例,这才导致了Missing queryFn的错误提示。

正确解决方案

方案一:用匿名函数包裹queryFn

将listofSessions用匿名函数包裹,确保传递给useInfiniteQuery的是一个函数而非执行结果:

const { data, isLoading, fetchNextPage, hasNextPage, error, isFetching } = 
useInfiniteQuery("listofSessions", ({ pageParam = 1 }) => listofSessions({ groupId, pageParam }), {
  getNextPageParam: (lastPage, pages) => {
    if (lastPage.length < 10) return undefined;
    return pages.length + 1;
  },
});

方案二:将参数加入queryKey(更推荐)

React Query的queryKey用于标识查询,参数变化时会自动触发新查询。把groupId加入queryKey,同时调整queryFn的写法:

const { data, isLoading, fetchNextPage, hasNextPage, error, isFetching } = 
useInfiniteQuery(["listofSessions", groupId], ({ queryKey, pageParam = 1 }) => {
  const [_, groupId] = queryKey;
  return listofSessions({ groupId, pageParam });
}, {
  getNextPageParam: (lastPage, pages) => {
    if (lastPage.length < 10) return undefined;
    return pages.length + 1;
  },
});

这种方式的优势是:当groupId发生变化时,React Query会自动取消旧查询并发起新查询,保证数据与参数匹配。

最后记得修改listofSessions函数里的硬编码值,改用传入的参数:

const listofSessions = async ({ groupId, pageParam = 1 }) => 
  await axios
    .get(`${apiURL}/groups/allsessions`, {
      params: {
        groupId, // 替换硬编码的63,使用传入的参数
        page: pageParam,
      },
    })
    .then((res) => {
      return res.data.data;
    });

内容的提问来源于stack exchange,提问作者Question hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:25:48