首页 > 其他分享 >useRequest 学习记录

useRequest 学习记录

时间:2023-12-20 19:23:51浏览次数:47  
标签:run service 记录 void useRequest 学习 params TParams data

https://ahooks.gitee.io/zh-CN/hooks/use-request/basic#api

 

const {
    loading: boolean,
    data?: TData,
    error?: Error,
    params: TParams || [],
    run: (...params: TParams) => void,
    runAsync: (...params: TParams) => Promise<TData>,
    refresh: () => void,
    refreshAsync: () => Promise<TData>,
    mutate: (data?: TData | ((oldData?: TData) => (TData | undefined))) => void,
    cancel: () => void,
} = useRequest<TData, TParams>(
    service: (...args: TParams) => Promise<TData>,
  {
    manual?: boolean,
    defaultParams?: TParams,
    onBefore?: (params: TParams) => void,
    onSuccess?: (data: TData, params: TParams) => void,
    one rror?: (e: Error, params: TParams) => void,
    onFinally?: (params: TParams, data?: TData, e?: Error) => void,
  }
);

 

loading:  接口动作是否需要loading,service是否正在执行

data: 接口正确返回的数据

error: 接口调用失败返回的错误信息,一般使用error.message

params: 接口调用的入参,可以从defaultParams, run, runAsync 等调用service的时候修改

run: service接口的别名? 个人理解,执行run就是调用service。run 是手动调用,并且错误处理可以由useRequest来进行,写在options里面(onSuccess, one rror等)

runAsync: 跟run的区别在于,runAsync 的错误处理要自己记性,最好包裹在try/catch中执行,返回的是个promise ,但是也可以用async/await 来处理

refresh 和 refreshAsync : 不太清楚,重复提交上一次的请求;不如说是,在执行refresh时,记录了上一次执行run时的入参,然后本次使用记录的入参去调用

useRequest 提供了 refresh 和 refreshAsync 方法,使我们可以使用上一次的参数,重新发起请求。

假如在读取用户信息的场景中

  1. 我们读取了 ID 为 1 的用户信息 run(1)
  2. 我们通过某种手段更新了用户信息
  3. 我们想重新发起上一次的请求,那我们就可以使用 refresh 来代替 run(1),这在复杂参数的场景中是非常有用的

mutate: 立即修改useRequest 返回的data数据,即把mutate的入参直接赋值给data , 然后再执行后续操作如调取接口,接口成功则隐式执行逻辑,接口失败要配套使用useRef把data数据还原到上一版本,所以在每次使用mutate前最好使用ref.current 保存旧值

cancel: 取消响应,而不是取消调用,service还是会执行,但是会取消掉对应的数据处理逻辑,不会赋值。另外,在组件每次卸载前,或者上次请求未结束就发起下一次请求时,会忽略掉卸载前以及上一次的请求

 

service: 对应的接口或异步动作

 

manual: 是否手动触发service。useRequest是会在初始化后自动执行的。

onBefore: service调用前的处理

onSuccess: 成功回调

onError: 错误回调

onFinally: 接口服务调用完毕的回调

 

拓展参数

options

loadingDelay: 300   配合loading使用的参数,在delay时间内接口返回,则不会触发loading,

pollingInterval: 3000 每隔多少毫秒开始轮询,可以使用cancel取消,使用run/runAsync 开启

pollingErrorRetryCount:3  轮询错误重试次数

ready: boolean 在ready状态为false, 任何service都将被忽略。manual为true时,ready切换到true时会自动触发一次请求;manual为false时,ready只有为true时,发起的请求才有效

refreshDeps: 依赖数组,当数组中的依赖发生变化时,触发service的再次调用

refreshOnWindowsFocus: 当当前窗口重新聚焦或者显示,触发onFocus或onVisibilityChange, 且间隔时间大于options.focusTimeSpan(毫秒数)时,重新调用service

debounceWait: 防抖策略,入参为毫秒数,当频繁触发run或asyncRun 时,只在最后一次触发后,延迟对应的毫秒数执行请求,默认延迟完成时执行请求。支持通过变量改变

throttleWait: 毫秒数,在频繁触发run或asyncRun时,只会在每经过对应毫秒数后,执行一次service。支持通过变量改变

cacheKey: 入参是字符串(最好是唯一标识), 能将当前请求成功的请求入参和返参都缓存下来,在下次触发事件时,优先返回缓存数据。个人发现弊端:不适合频繁触发事件或频繁切换显示的组件,会引起页面内容当面刷新

staleTime: 缓存有效时间,设置为-1就是永远不过期

cacheTime: 缓存数据回收时间,默认5分钟,设置为-1就永不回收

setCache: (data: cacheData) => void  给一种设置缓存数据的方式,localStorage 或者IndexDB

getCache: (params: any) => return cacheData

clearCache: 可以从 ahooks中引入此函数,入参为cacheKey 字符串或对应key 数组,清空当前入参的缓存数据

retryCount: 当前service请求错误后重试的次数,这个次数不包含当前请求,retryInterval 重试时间间隔

 

标签:run,service,记录,void,useRequest,学习,params,TParams,data
From: https://www.cnblogs.com/space-cbh/p/17917292.html

相关文章

  • Maix II Dock gpio子系统点亮LED学习
    一、Linux的gpio子系统1、Linux内核提供pinctrl子系统,目的为了统一各soc厂商的pin引脚管理;2、pinctrl子系统提供的功能①、管理系统中所有可控制的pin引脚:在系统初始化时候,枚举所有可控制的pin,并标识这些pin;②、管理这些pin的复用功能:配置若干引脚组......
  • rabbit mq学习
    在快速开启中,RocketMQ为我们提供了中文的学习文档,https://github.com/apache/rocketmq/tree/master/docs/cn学习RocketMQ需要5个先前条件。推荐使用64位操作系统,建议使用Linux/Unix/Mac;(Windows用户请参见下面的指南)64位JDK1.8+;Maven3.2.x;Git;适用于Broker服务器的4g+可用......
  • 记录--get请求参数放在body中?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1、背景与后端对接口时,看到有一个get请求的接口,它的参数是放在body中的******get请求参数可以放在body中??随即问了后端,后端大哥说在postman上是可以的,还给我看了截图 可我传参怎么也调不通!下面就来探究到......
  • 1. 学习Tomcat源码,写服务器
    一个基础需求的http服务器项目的github地址small_http:gitclonehttps://github.com/MrKrabXie/writeHttpServer.git预备知识问:什么是超文本传输协议(HTTP)?答:HTTP是一种用于传输超媒体文档的协议,它使用请求-响应模式和TCP连接来实现通信。问:Java中的Socket和ServerSocket类......
  • Markdown学习
    Markdown学习标题“#+空格+加标题”想要几级标题加几个#字体加粗:“字体两边加两个*星”斜体:“字体两边加一个*星”删除线:”字体两边加两个~波浪线“·HelloWorld!ha引用选择java找好工作前面加一个>HelloWorld分割线三个---图片方法"!+[]+(其中输入地址图......
  • 2023-12-20 前几天看新闻,杀人犯逃跑的二十年,有感,今天记录
    2023-12-20     前几天看新闻,有个女杀人犯逃跑的二十年,被抓了执行死刑了。她那二十年,那叫一个岁月静好,养了两条狗,谈钢琴,画画。    就忽然觉得,我的人生过得太苟且了,还不如一个杀人犯。太无趣了。每天就是上班下班,刷手机,睡觉。要发展一点自己的爱好。    ......
  • VUE3学习基础之模板语法
    我的vue3学习之路总是学学停停,最开始在18年开发微信小程序,就发现小程序和vue的语法有些相似,然后就去看了vue2的文档,随后忙其它的事情就丢下了。直到22年又开始捡起来vue3,有了组合式api,语法简明很多,然后又不知道忙什么丢下。。。前段有些空时间,就把vue3的学习整理下,使用vite构建......
  • 自学精灵--专业的编程学习网站
    ​这是我看过的最靠谱的编程学习网站,名字是:自学精灵,网站是:learn.skyofit.com。(百度搜索"自学精灵"也可找到此站,搜不到可以用必应搜)。自学精灵是全网最强的学习平台,我不喜欢“全网最强”这样的字眼,但此站的内容确实是全网最强!此站内容很丰富,包括:入门:Java学习路线及资料、Java项......
  • <学习笔记> 四边形不等式
    四边形不等式对于任意的\(l_1\lel_2\ler_1\ler_2\),满足\(w(l_1,r_1)+w(l_2,r_2)\lew(l_1,r_2)+w(l_2,r_1)\)。若等号恒成立,则称函数\(w\)为四边形恒等式。如何证明若满足\(w(l,r-1)+w(l+1,r)\leqw(l,r)+w(l+1,r-1)\),则\(w\)满足四边形不等式。决策单调......
  • Go标准库学习:io库
    io库io中包括了常用的io流中的函数,并依靠这些函数定义了常用的接口和接口组合。我觉得这是最重要的。常量(Constants)const(SeekStart=0//定位到文件头SeekCurrent=1//定位到当前读写的位置SeekEnd=2//定位到文件尾)都是用于在文件读写时进行定......