useAjax.tsx 3.3 KB

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