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

如何在组件加载时自动调用TanStack Query的useMutation?

TanStack Query组件加载时自动调用useMutation的实现方法

首先得明确:TanStack Query的useMutation设计初衷是处理数据修改操作(比如增删改),获取数据更适合用useQuery——它会自动在组件挂载时触发请求,还自带缓存、自动重试等功能。不过如果你的后端确实要求用POST请求获取列表,那也可以用useMutation实现组件加载时自动执行,下面是具体方案:

方法1:用useEffect触发mutate(组件挂载时执行)

直接在组件里用useEffect,依赖项设为包含mutate、userId、token的数组,组件一加载就调用mutate:

import { useEffect, useState } from 'react';
import { fetchClient } from './你的模块路径';

function ClientList() {
  const [clients, setClients] = useState([]);
  const { mutate } = fetchClient();
  // 假设userId和token从上下文、状态或路由中获取
  const userId = '你的用户ID';
  const token = '你的令牌';

  useEffect(() => {
    const requestData = { userId, token };
    mutate(requestData, {
      onSuccess: (response) => {
        if (response.status === 200) {
          setClients(response.data.client);
        }
      },
      onError: (error) => {
        console.error('获取客户列表失败:', error);
      }
    });
  }, [mutate, userId, token]); // 依赖项确保参数变化时重新请求

  return (
    <div>
      {/* 渲染客户列表 */}
    </div>
  );
}

方法2:推荐改用useQuery(更贴合TanStack Query设计)

如果后端支持用GET请求获取列表,强烈建议换成useQuery,这才是TanStack Query处理数据查询的标准方式:

先修改请求函数为GET方式:

import axios from 'axios';

export const fetchClients = async ({ userId, token }) => {
  const res = await axios.get(`${import.meta.env.VITE_BASE_URL}/client/List`, {
    params: { userId },
    headers: { Authorization: `Bearer ${token}` } // 根据后端要求传递token
  });
  return res.data.client;
};

然后在组件中使用useQuery:

import { useQuery } from '@tanstack/react-query';
import { fetchClients } from './你的模块路径';

function ClientList() {
  const userId = '你的用户ID';
  const token = '你的令牌';

  const { data: clients, isLoading, error } = useQuery({
    queryKey: ['clients', userId, token], // 缓存键,参数变化时自动重新请求
    queryFn: () => fetchClients({ userId, token }),
  });

  if (isLoading) return <div>加载中...</div>;
  if (error) return <div>加载失败:{error.message}</div>;

  return (
    <div>
      {/* 渲染客户列表 */}
    </div>
  );
}

注意事项

  • 若必须用POST请求获取数据,使用方法1时可通过axios取消令牌处理组件卸载时的请求,避免内存泄漏。
  • useQuery会自动缓存请求结果,相同queryKey不会重复发起请求;而useMutation每次调用都会发送新请求,这是两者的核心差异。

内容的提问来源于stack exchange,提问作者ATHUL SURESH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:00:54