useAjax.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { CombineService, Mutate } from '@ahooksjs/use-request/lib/types'
  2. import { message } from 'antd'
  3. import moment from 'moment'
  4. import { useRequest } from 'umi'
  5. interface Options {
  6. manual?: boolean,//手动模式true开启
  7. pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run
  8. pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询
  9. debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。
  10. throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。
  11. cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制
  12. onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params
  13. onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。
  14. formatResult?: boolean,//格式化请求结果
  15. initialData?: any,//默认的 data
  16. msgNmae?: string,
  17. }
  18. /**
  19. *
  20. * @param fnc
  21. * @param options:Options
  22. * @param manual?: boolean,//手动模式true开启
  23. * @param pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run
  24. * @param pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询
  25. * @param debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。开启后then获取不到res
  26. * @param throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。开启后then获取不到res
  27. * @param cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制
  28. * @param onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params
  29. * @param onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。
  30. * @param formatResult?: boolean,// 开启返回原数据,不开启默认返回res.data
  31. * @param initialData?: any,//默认的 data
  32. * @param msgNmae?: string,//操作完成提示文字
  33. *
  34. */
  35. export interface FnAjax<T>{
  36. loading:boolean,
  37. data:T,
  38. run:(...args:any)=>Promise<any>,
  39. refresh:()=>Promise<any>,
  40. mutate: Mutate<any>
  41. }
  42. export function useAjax(fnc: CombineService<any, any>, options?: Options){
  43. const ajax = useRequest(fnc, {
  44. manual: options?.manual || true,
  45. cacheKey: options?.cacheKey,
  46. pollingInterval: options?.pollingInterval || undefined,
  47. debounceInterval: options?.debounceInterval || undefined,
  48. // throttleInterval:500,
  49. formatResult: (res) => {
  50. let reqTime = moment().format('YYYY-MM-DD HH:mm:ss')
  51. res['reqTime'] = reqTime
  52. return options?.formatResult ? {...res,reqTime} :res.data
  53. },
  54. onSuccess: (res) => {
  55. if (res) {
  56. options?.msgNmae && message.success(options?.msgNmae + '成功!', 2)
  57. }
  58. return null
  59. },
  60. onError: () => {
  61. }
  62. })
  63. return ajax
  64. }