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

如何从RTK Query的useQuery钩子中解构可调用查询函数?

问题:从RTK Query的useGetUserQuery中解构可调用的getUser查询函数

已知RTK Query生成的useLogInMutation钩子可以解构出可异步调用的logIn函数,示例如下:

const [logIn] = useLogInMutation();
const handleLogin = async () => {
    const username = 'username';
    const password = 'password';

    await logIn({
        username,
        password,
    });
};

现在需要实现类似的调用方式,通过解构getUser函数手动执行查询,目标调用代码如下:

const handleGetUser = async () => {
    await getUser();
};

但当前useGetUserQuery的常规解构方式是获取数据与状态:

const { data: user, isSuccess, isError, error } = useGetUserQuery();

请问如何从useGetUserQuery中解构出可调用的getUser查询函数?


解决方案

RTK Query中,查询钩子(如useGetUserQuery)默认会在组件挂载时自动发起请求,要实现手动触发的调用方式,有两种常用方案:

方案1:利用refetch函数并设置skip参数

通过解构useGetUserQuery返回的refetch方法,将其重命名为getUser,同时设置skip: true阻止初始自动请求:

// 传入undefined作为查询参数(如果你的查询不需要参数),设置skip: true
const { data: user, isSuccess, isError, error, refetch: getUser } = useGetUserQuery(undefined, {
  skip: true
});

const handleGetUser = async () => {
  // 调用getUser即可手动触发查询
  await getUser();
};

方案2:使用useLazyQuery钩子(推荐)

RTK Query提供了专门用于手动触发查询的useLazyQuery钩子,其返回值结构与mutation钩子类似,第一个元素就是可调用的查询函数:

// 导入对应的useLazyQuery钩子(需要从API slice中生成)
const [getUser, { data: user, isSuccess, isError, error }] = useLazyQuery(getUserQuery);

const handleGetUser = async () => {
  await getUser();
};

这种方式更贴合你想要的调用体验,无需额外配置skip参数,适合按需触发查询的场景。


内容的提问来源于stack exchange,提问作者cyber-leech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:06:44