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

如何在React的React-Query mutation中添加onSuccess回调

如何在修改后的React-Query Mutation中添加onSuccess回调

你修改后的代码完全可以添加onSuccess回调,和React-Query的常规用法一致,只需要在useMutation的第二个参数中传入配置对象即可。如果需要在回调中操作缓存(比如失效查询),记得重新引入useQueryClient。

完整示例代码(含缓存操作)

import { useMutation, useQueryClient } from 'react-query';
import { IUploadFieldRequest } from '../constants/types';
import { licenseServiceAPI } from '../services';

export const URI = () => '/licenses/upload';

export const useUploadLicense = () => {
  const queryClient = useQueryClient();
  const [apiService] = licenseServiceAPI<FormData>({
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });

  const {
    data: response,
    mutateAsync,
    isLoading,
    isSuccess
  } = useMutation(
    // 自定义Mutation逻辑:处理文件并发起POST请求
    (formData: IUploadFieldRequest) => {
      const form = new FormData();
      Array.from(formData.files)?.forEach((file) => {
        form.append('license-file', file);
      });

      return apiService.post(URI(), form);
    },
    // 配置对象:添加onSuccess回调
    {
      onSuccess: () => {
        // 示例:失效指定查询缓存,触发数据重新获取
        queryClient.invalidateQueries('test');
        // 可添加其他成功后逻辑,如用户提示
        console.log('文件上传成功');
      }
    }
  );

  return {
    data: response?.data,
    uploadFiles: mutateAsync,
    isLoading,
    isSuccess
  };
};

export default useUploadLicense;

简化版(无需缓存操作)

如果不需要操作缓存,只需移除useQueryClient相关代码即可:

import { useMutation } from 'react-query';
import { IUploadFieldRequest } from '../constants/types';
import { licenseServiceAPI } from '../services';

export const URI = () => '/licenses/upload';

export const useUploadLicense = () => {
  const [apiService] = licenseServiceAPI<FormData>({
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });

  const {
    data: response,
    mutateAsync,
    isLoading,
    isSuccess
  } = useMutation(
    (formData: IUploadFieldRequest) => {
      const form = new FormData();
      Array.from(formData.files)?.forEach((file) => {
        form.append('license-file', file);
      });

      return apiService.post(URI(), form);
    },
    {
      onSuccess: () => {
        console.log('文件上传成功');
        // 自定义其他成功逻辑
      }
    }
  );

  return {
    data: response?.data,
    uploadFiles: mutateAsync,
    isLoading,
    isSuccess
  };
};

export default useUploadLicense;

关键说明

  • useMutation接收两个核心参数:第一个是执行异步请求的自定义函数,第二个是配置对象,onSuccess就定义在这个配置对象中。
  • onSuccess回调会在Mutation异步请求成功完成后自动触发,可用于缓存更新、用户提示、页面跳转等后续操作。

内容的提问来源于stack exchange,提问作者Leo Messi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:55:17