写了一个 Vue 3 的请求库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
John60676
V2EX    Vue.js

写了一个 Vue 3 的请求库

  •  4
     
  •   John60676 2020-12-28 10:11:28 +08:00 5548 次点击
    这是一个创建于 1760 天前的主题,其中的信息可能已经有所发展或是发生改变。
    稍微推广一下自己的开源项目。
    一个能帮你管理请求状态的 Vue 3 请求库: https://github.com/AttoJS/vue-request

    之前无意中看到了 ahooks 里面的一个 useRequest,觉得里面的功能整合得挺不错的。找了一下也没有发现 Vue 3 有类似的库,于是就打算搞一个玩玩,顺便踩踩 Vue 3 的坑。

    目前阶段就差文档还没完善好,只把基础的功能展示出来了,后面有空闲时间(摸鱼)再补充完吧。

    测试啥的都配套好了,感兴趣的同学可以尝试一下。遇到问题的可以提个 Issue 大家讨论一下 :)
    第 1 条附言    2020-12-28 10:56:05 +08:00
    看来标题写错了,我们不是请求库[捂脸],是管理请求状态的库

    例如一些 loading 状态 、错误处理 、请求的节流 /防抖、轮询等。这些东西都内置在里面了
    第 2 条附言    2020-12-28 10:59:05 +08:00
    第 3 条附言    2021-01-25 17:00:32 +08:00
    添加了 gitee 源的文档: https://attojs.gitee.io/vue-request-docs/
    第 4 条附言    2021-03-23 09:25:07 +08:00
    文档已经全部完善了。也添加了两个扩展库:usePagination(分页) 和 useLoadMore(加载更多)

    最新文档地址: https://www.attojs.org
    国内源: https://www.attojs.com
    35 条回复    2021-07-15 22:36:43 +08:00
    xiadd
        1
    xiadd  
       2020-12-28 10:40:50 +08:00   1
    哈哈,支持一下,包名就是从我这转过去的
    John60676
        2
    John60676  
    OP
       2020-12-28 10:44:51 +08:00
    @xiadd 哈哈哈,多谢大佬提供的包名
    tomoya92
        3
    tomoya92  
       2020-12-28 10:49:14 +08:00
    浏览器自带的 fetch 就很香。
    shroxd
        4
    shroxd  
       2020-12-28 10:49:30 +08:00 via iPhone   1
    一下晚上看看
    John60676
        5
    John60676  
    OP
       2020-12-28 10:51:09 +08:00
    @tomoya92 不一样哦,是 Fetch 请求,我们这个库是负责管理请求的状态,例如一些 loading 之类的。我们内置的请求库也是用的 Fetch,真的香
    loading
        6
    loading  
       2020-12-28 10:52:04 +08:00 via Android   3
    vue3 不推荐用 axios 了吗?
    John60676
        7
    John60676  
    OP
       2020-12-28 10:52:40 +08:00
    @John60676 勘误 :“是 Fetch 请求” => “ Fetch 是请求的实现”
    tomoya92
        8
    tomoya92  
       2020-12-28 10:55:59 +08:00   1
    @John60676 #5 哦哦,赞一个。

    不过 fetch 返回的对象我记得是 Promise,Promise 自身也是带状态的呀,也没必要再封装一层去管理吧
    John60676
        9
    John60676  
    OP
       2020-12-28 10:57:42 +08:00
    @tomoya92 具体可以看看文档,其实我们跟请求库没啥直接关系的 [捂脸] ,标题写错了
    John60676
        10
    John60676  
    OP
       2020-12-28 10:58:05 +08:00
    @loading 其实我们跟请求库没啥直接关系的 [捂脸] ,标题写错了
    loading
        11
    loading  
       2020-12-28 11:37:47 +08:00 via Android
    就差文档没写(以后也不会写吧
    John60676
        12
    John60676  
    OP
       2020-12-28 11:42:45 +08:00
    @loading 放心,会的。文档完成了 50% 左右了。指南剩下在线 demo 待补充 和 API 章节而已 (一方面也在等 vuepress-next )。而且目前库只是完成了基本功能,我们还有一些想法没加进去,苦逼打工人,年底太多活干了。争取春节期间完善好
    agdhole
        13
    agdhole  
       2020-12-28 12:18:11 +08:00 via iPhone
    swr 有 vue 版本,就叫 swrv
    John60676
        14
    John60676  
    OP
       2020-12-28 12:21:47 +08:00
    @agdhole 这个我们调研时看过了,我们的方向跟他的不一样 [doge]
    agdhole
        15
    agdhole  
       2020-12-28 12:22:47 +08:00 via iPhone
    @John60676 有什么区别或者特色呢?
    John60676
        16
    John60676  
    OP
       2020-12-28 12:37:09 +08:00
    @agdhole 他们主要还是围绕着数据的状态来做管理的,比如验证数据是否过期决定是否要重新请求。我们关注点是接口的管理,内置了一些日常用得比较多的操作,比如接口的防抖 /节流,loading 状态的管理,还有并行请求等,目的还是减少一些重复的业务代码
    oldshensheep
        17
    oldshensheep  
       2020-12-28 13:46:27 +08:00   1
    看了一下,感觉不错.
    不用自己重新造轮子了,希望文档能够完善.
    John60676
        18
    John60676  
    OP
       2020-12-28 14:03:08 +08:00
    @oldshensheep 提上日程,最近争取搞完整[捂脸]
    dewfall
        19
    dewfall  
       2020-12-28 14:29:55 +08:00   1
    借楼推一个写文档的工具,对展示 demo 这些有封装,楼主可以尝试下
    https://github.com/dewfall123/vitepress-for-component

    然后支持 vue2,可以用大佬的库 vue-demi,简单修改下就支持 vue2,很好用
    https://github.com/antfu/vue-demi
    jones2000
        20
    jones2000  
       2020-12-28 14:57:45 +08:00   1
    批量请求一组 api 数据, 等所有的都到达了再 return 支持吗?
    Chlorite
        21
    Chlorite  
       2020-12-28 15:08:53 +08:00   1
    看着很不错,支持以下
    John60676
        22
    John60676  
    OP
       2020-12-28 15:10:05 +08:00
    @jones2000 什么场景下需要这样用,能说具体一点吗。要不来个 issue 我们讨论一下
    John60676
        23
    John60676  
    OP
       2020-12-28 15:10:43 +08:00
    @dewfall Vue 2 的兼容性支持我们有计划的
    jones2000
        24
    jones2000  
       2020-12-28 15:56:27 +08:00
    @John60676 前端业务需要请求调用多个不同的第 3 方数据,以后进行统计显示出来。 最后的办法是后台来做。但是后台人手不足,另外就时后台调用多了 可能被封 ip, 所以直接让客户端处理。
    John60676
        25
    John60676  
    OP
    2020-12-28 16:08:00 +08:00
    @jones2000 这个貌似是上层的问题了,我们的库支持传入 Promise, 你的多个请求可以用 Promise.all / Promise.allSettled / Promise. race (这三个视需求选择)聚合一下
    shakaraka
        26
    shakaraka  
    PRO
       2020-12-28 16:12:09 +08:00
    @jones2000 #20 rxjs 的 forkJoin 可以实现
    loveToMy1
        27
    loveToMy1  
       2020-12-28 16:20:01 +08:00   1
    前人栽树,后人吃水不忘挖井人,给力奥楼主
    suzic
        28
    suzic  
       2020-12-28 16:26:11 +08:00 via Android   1
    我之前也根据 flyio 封装了一个,你这个比较通用一点
    tikazyq
        29
    tikazyq  
       2020-12-28 16:32:35 +08:00
    axios 轮子不够用?
    John60676
        30
    John60676  
    OP
       2020-12-28 16:40:39 +08:00
    @tikazyq 跟 axios 可不一样哦,我们这个库是负责管理请求的状态
    kim886
        31
    kim886  
       2020-12-29 15:38:05 +08:00
    支持一下
    anguiao
        32
    anguiao  
       2020-12-31 01:01:51 +08:00 via Android   1
    最近确实在找这样的库,经常写一些重复性的代码来处理请求状态,有这样的库应该会好很多。
    /td>
    John60676
        33
    John60676  
    OP
       2020-12-31 09:20:16 +08:00
    @anguiao 哈哈哈,这个确实是个痛点。有需要的可以用一下,文档最近在完善了
    TmacV2
        34
    TmacV2  
       2021-03-01 11:21:26 +08:00   1
    支持一下
    anguiao
        35
    anguiao  
       2021-07-15 22:36:43 +08:00   1
    没想到之前回复过这个帖子,这次是真的用上了
    刚上手,目前感觉还不错。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5118 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 05:44 PVG 13:44 LAX 22:44 JFK 01:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86