alova—轻量级请求策略库

文章目录

  • 前言
    • alova 是什么
    • 为什么创造 alova
  • 一、选择 alova 的理由?
  • 二、使用步骤完整的特性列表
    • alova 请求策略表
  • 三、如何使用
    • 安装
    • 使用 useRequest 发送一个请求
  • 总结
    • alova和请求库的关系


前言

在这里插入图片描述Alova官网
Alova—github官网

alova 是什么

alova 是一个轻量级的请求策略库,目标是让接口的管理和使用变得非常简单,主要分为以下两部分:

  • 声明式实现复杂请求

    支持开发者使用声明式实现例如请求共享、分页请求、表单提交、断点续传等各种较复杂的请求,让开发者使用非常少量的代码就可以实现高可用性和高流畅性的请求功能,这意味着,你再也不需要自己绞尽脑汁编写请求优化代码,再也不需要自己维护请求数据和相关状态,你只需要选择并使用请求模块,设置参数后,alova 帮你搞定。从而提升开发效率、应用运行效率,还能降低服务端压力。

  • API 自动管理和维护(开发中)

    可自动生成 ts 类型完整的、描述完整的请求函数,你也不再需要查阅 API 文档,而是在 IDE 中通过关键字找到你想使用的请求函数,然后像访问location.reload一样使用它们,让客户端代码和服务器端无缝对接。无论是 js 项目还是 ts 项目,你都可以享受响应数据的类型提示。

    当服务端更新 API 时,前端项目还会收到变动通知,并且会阻止项目发布。

为什么创造 alova

数据请求一直是应用程序必不可少的重要部分,自从 XMLHttpRequest 诞生以来请求方案层出不穷,客户端的数据交互探索一直聚焦于请求的简单性,如$.ajax、axios、fetch api以及react-query等请求工具,编码形式从回调函数、Promise,再到 usehook 不断发展,这些 js 库在请求简单性上已经做得很好了,不过它们只提供了通用的功能,这意味着对于不同的请求场景例如共享请求、分页请求、表单提交、上传和下载文件等,开发者依然需要自己编写复杂的代码,降低开发效率,性能也无法得到保证,在越来越看重的用户体验的时代,应用的流畅性变得越来越重要。

同时,客户端和服务端的协作也是割裂的,前端工程师需要查阅 API 文档并手动编写 API 函数,并且服务端 API 的任何更改都需要主动通知前端工程师,这将会使产品变得更加不可控。

而我们认为还有更简单的方案,两步即可完成复杂请求:

直接在 IDE 中使用关键词找到你想使用的请求函数(请求函数自动生成);
根据你的请求场景,例如分页、表单提交、断点续传等,选择对应的 useHook,它将帮你管理数据,控制何时应该发送请求;
从而让开发者在编写少量代码也能实现更高效地 Client-Server 数据交互,这就是我们提出的解决方案。同时,alova 具有很灵活的扩展能力来实现不同场景下的请求策略,你也可以自定义自己的请求场景,这部分内容在高级章节。

为了覆盖更多请求场景,我们还将请求场景抽象成了 请求场景模型(RSM),它很好地解释了 alova 的请求策略方案。在未来,alova 将承载着我们对请求策略的探索之路继续前行。


一、选择 alova 的理由?

alova 也致力于解决客户端网络请求的问题,但与其他请求库不同的是,alova 选择了业务场景化请求策略的方向,它配合axios/fetch api等请求库后能满足你绝大部分请求需求(99%)的同时,还提供了丰富的高级功能。

你可能曾经也在思考着应该封装fetch和axios,现在你不再需要这么做了,通过 alova 使用声明的方式完成请求,例如请求共享、分页请求、表单提交、断点上传等各种较复杂的请求,以及自动化缓存管理、请求共享、跨组件更新状态等。
alova 是轻量级的,只有 4kb+,是 axios 的 30%+。
目前支持vue/react/react-native/svelte,以及next/nuxt/sveltekit等 SSR 框架,同时也支持Uniapp/Taro多端统一框架。
alova 是低耦合的,你可以通过不同的适配器让 alova 在任何 js 环境下,与任何 UI 框架协作使用(内置支持的 UI 框架为vue/react/svelte),并且提供了统一的使用体验和完美的代码迁移。
使用 alova 还能实现 api 代码的高聚合组织方式,每个 api 的请求参数、缓存行为、响应数据转换等都将聚集在相同的代码块中,这对于管理大量的 api 有很大的优势。


二、使用步骤完整的特性列表

  • 🕶 在 vue(composition/options)、react、svelte 3 个 UI 框架,以及 uniapp、taro 环境下提供统一的使用体验,完美迁移
  • 📑 与 axios 相似的 api 设计,更简单熟悉
  • 🍵 开箱即用的高性能场景化请求策略,让应用更流畅
  • 🐦 4kb+,只有 axios 的 30%+
  • 🔩 高灵活性,兼容任意请求库,如 axios、superagent 或 fetch-api
  • 🔋 3 种数据缓存模式,提升请求性能,同时降低服务端压力
  • 🔌 丰富的扩展功能,可以自定义请求适配器、存储适配器、中间件,以及 states hook
  • 🖥️ [2.2.0+]服务端渲染(SSR)
  • 💕 请求共享,避免同时发送相同请求
  • 🪑 数据预拉取,这意味着用户可以更快看到信息,无需等待
  • 🦾 实时自动状态管理
  • 🎪 交互式文档和示例
  • 🎈 Typescript 支持
  • ⚡ 支持 tree shaking,这意味着 alova 的生产体积往往小于 4kb

alova 请求策略表

alova 是核心库,它提供了缓存策略、请求共享策略,以及状态管理等通用功能,能满足 99%以上的请求需求。同时,alova 还提供了业务逻辑的,高频使用的请求策略 hook,可以直接用于特定场景。以下为 alova 提供的请求策略 hook 列表。

名称描述文档
分页请求策略自动管理分页数据,数据预加载,减少不必要的数据刷新,流畅性提高 300%,编码难度降低 50%usePagination
无感数据交互策略全新的交互体验,提交即响应,大幅降低网络波动造成的影响,让你的应用在网络不稳定,甚至断网状态下依然可用useSQRequest
表单提交策略为表单提交而设计的 hook,通过此 hook 你可以很方便地实现表单草稿、多页面(多步骤)表单,除此以外还提供了表单重置等常用功能useForm
文件上传策略更简单的文件上传策略,支持对 base64、Blob、ArrayBuffer、Canvas 数据的自动识别和转换useUploader
发送验证码验证码发送 hook,减掉你在开发验证码发送功能时的繁琐。useCaptcha
自动重新拉取数据在一定条件下自动重新拉取数据,保证始终展示最新数据。useAutoRequest
跨组件触发请求一个 alova 中间件,消除组件层级的限制,在任意组件中快速地触发任意请求的操作函数actionDelegationMiddleware
串行请求的 useRequest比alova 的串行请求方式更加简洁易用的串行请求 use hook,提供统一的 loading 状态、error、回调函数useSerialRequest
串行请求的 useWatcher比alova 的串行请求方式更加简洁易用的串行请求 use hook,提供统一的 loading 状态、error、回调函数。useSerialWatcher
请求重试策略请求失败自动重试,它在重要的请求和轮询请求上发挥重要作用useRetriableRequest
SSE 请求通过 Server-sent Events 进行请求useSSE

三、如何使用

安装

npm install alova --save

alova 结合 UI 框架,让请求变得更简单,你可以使用 alova 提供的use hook发起请求,它将返回例如loading等多个请求相关的状态化数据,并在 alova 中自动管理它们,而无需自己维护。

使用 alova 时,请确保 UI 框架符合以下版本要求:

React: >= v16.8
Vue: 2.7、3.x
Svelte: 任意

使用 useRequest 发送一个请求

<template>
  <div v-if="loading">Loading...</div>
  <div v-else-if="error">{{ error.message }}</div>
  <span v-else>responseData: {{ data }}</span>
</template>

<script setup>
import { createAlova, useRequest } from 'alova';
import GlobalFetch from 'alova/GlobalFetch';
import VueHook from 'alova/vue';
// 1. 创建alova实例
const alovaInstance = createAlova({
  // VueHook用于创建ref状态,包括请求状态loading、响应数据data、请求错误对象error等
  statesHook: VueHook,
  // 请求适配器,推荐使用fetch请求适配器
  requestAdapter: GlobalFetch(),
  // 全局的响应拦截器
  responded: response => response.json()
});
// 2. 使用alova实例创建method并传给useRequest即可发送请求
const { loading, data, error } = useRequest(
  alovaInstance.Get('https://jsonplaceholder.typicode.com/todos/1')
);
</script>

总结

alova和请求库的关系

传统promise式的请求库很好地解决了请求发送的问题,只是…它们只是单纯的请求发送工具

alova像它们的武器装备,通过alova可以获得更强大的能力,不管您喜欢使用axios、superagent,还是浏览器的fetch-api,alova都可以完美兼容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/176797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

驶入产业发展快车道,汉鑫科技人工智能研发中心正式启用!

11月18日&#xff0c;汉鑫科技人工智能研发中心正式启用。中心立足烟台&#xff0c;服务全国&#xff0c;聚焦工业智能、智能网联、智慧城市三大业务板块&#xff0c;以人工智能技术赋能政企实现“数智化”转型升级。该中心的启用标志着汉鑫科技在人工智能研发应用领域迈上了新…

如何在windows使用别名远程执行命令

需求背景 在开发中,需要在服务器执行脚本,需要如下几步操作: 1.打开xshell 2.登录服务器 3.进入命令脚本的路径 4.执行脚本 但是,作为懒人来说,操作太繁琐了,真麻烦,能不能一键就解决那么多操作?所以,开始研究windows有没有这个东西,而且不需要额外的软件就可以实现的.结…

优化记录 -- 记一次搜索引擎(SOLR)优化

业务场景 某服务根据用户相关信息&#xff0c;使用搜索引擎进行数据检索 软件配置 solr 1台&#xff1a;32c 64g 数据10gb左右&#xff0c;版本 7.5.5 应用服务器1台&#xff1a;16c 64g 应用程序 3节点 问题产生现象 1、因业务系统因处理能不足&#xff0c;对业务系统硬件…

渲染器之挂载与更新

讲解渲染器的核心功能&#xff1a;挂载与更新。 1、挂载子节点和元素的属性 当 vnode.children 的值是字符串类型时&#xff0c;会把它设置为元素的文本内容。一个元素除了具有文本子节点外&#xff0c;还可以包含其他元素子节点&#xff0c;并且子节点可以是很多个。为了描述…

产品需求分析师的基本职责(合集)

产品需求分析师的基本职责1 职责 1、主要对用友司库云产品进行调研及产品规划; 2、根据司库云业务需求进行详细需求的用户故事、原型设计、需求分析、详细需求文档编写等; 3、进行产品的需求管理、需求验证、产品演示等需求工作; 4、配合开发、UE人员完成对产品的开发任务;…

YOLOv5 分类模型 OpenCV和PyTorch两者实现预处理的差异

YOLOv5 分类模型 OpenCV和PyTorch两者实现预处理的差异 flyfish PyTorch封装了PIL库 简单对比下两者的使用方法 import cv2 from PIL import Image import numpy as npfull_path_file_name"/media/a//ILSVRC2012_val_00001244.JPEG"#OpenCV读取图像默认是BGR顺序 …

代码混淆不再愁:一篇掌握核心技巧

​ 1. 概述 代码混淆是将计算机程序的代码转换成一种功能上等价&#xff0c;但是难以阅读和理解的形式。 对于软件开发者来说&#xff0c;代码混淆可以在一定程度上保护程序免被逆向。 对于逆向工程师来说&#xff0c;学习代码混淆可以帮助我们研究反混淆技术。 2. 常见混淆…

Java Stream中的API你都用过了吗?

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享。 在本教程中&#xff0c;您将通过大量示例来学习 Java 8 Stream API。 Java 在 Java 8 中提供了一个新的附加包&#xff0c;称为 java.util.stream。该包由类、接口和枚举组成&#x…

netstat

netstat 命令用于显示网络状态 参数说明&#xff1a; -a或--all 显示所有连线中的Socket&#xff0c;默认不显示LISTEN相关 -n 拒绝显示别名&#xff0c;能显示数字的全部转化成数字 -e或--extend 显示网络扩展信息(User&#xff0c;Inode) -p或--programs 显示正在使用So…

【精选】构建智能木材计数系统:深度学习与OpenCV完美结合(详细教程+源码)

1.研究背景与意义 随着科技的不断发展&#xff0c;计算机视觉技术在各个领域中得到了广泛的应用。其中&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;作为一种强大的深度学习模型&#xff0c;已经在图像识别、目标检测、人脸识…

Linux常用操作 Vim一般使用 SSH介绍 SSH密钥登录

目录 1. 常用命令 2. vim一般使用 3. SSH介绍 4. ssh密钥登录 1. 常用命令 1&#xff09;# 与 $ 提示的区别 # 表示用户有root权限&#xff0c;一般的以root用户登录提示符为#&#xff0c; $提示符表示用户为普通用户 2&#xff09;ifconfig 查看ip地址 eno1: 代表由主板…

【React-Router】导航传参

1. searchParams 传参 // /page/Login/index.js import { Link, useNavigate } from react-router-dom const Login () > {const navigate useNavigate()return <div>登录页<button onClick{() > navigate(/article?id91&namejk)}>searchParams 传参…

永恒之蓝漏洞复现

https://blog.csdn.net/qq_44159028/article/details/104044002 跟着这篇复现的 改造“永恒之蓝”制作了wannacry勒索病毒&#xff0c;使全世界大范围内遭受了该勒索病毒 影响版本 目前已知受影响的 Windows 版本包括但不限于&#xff1a;WindowsNT&#xff0c;Windows2000、W…

普乐蛙VR航天航空巡展项目来到了第七站——绵阳科博会

Hi~ 你有一份邀约请查收 11月22日—26日绵阳科博会 普乐蛙展位号&#xff1a;B馆科技体验区(1) 邀你体验趣味VR科普&#xff0c;探索科技新发展 第十一届中国(绵阳)科技城国际科技博览会 绵阳科博会自2013年创办以来&#xff0c;已连续成功举办十届&#xff0c;已有近7000家单位…

PostgreSQL导出表结构带注释

我们在平时开发过程中&#xff0c;经常会在字段的注释中&#xff0c;加上中文&#xff0c;解释字段的相关含义&#xff0c;也可以避免时间太久忘记这个字段代表什么&#xff0c;毕竟英文水平不好。我们可能要经常整理数据库表结构&#xff0c;提供他人去收集数据&#xff0c;但…

运行代码时不同软件的参数写法

目录 pycharm终端 pycharm 如下图所示&#xff0c;不同参数间不需要什么间隔什么东西 终端 如下图所示&#xff0c;不同参数间需要用一个符号来间隔

企业如何选择一款高效的ETL工具

企业如何选择一款高效的ETL工具? 在企业发展至一定规模后&#xff0c;构建数据仓库&#xff08;Data Warehouse&#xff09;和商业智能&#xff08;BI&#xff09;系统成为重要举措。在这个过程中&#xff0c;选择一款易于使用且功能强大的ETL平台至关重要&#xff0c;因为数…

2023 IDEA大会开幕 共探AI新篇章下的技术创新与创业

11月22日&#xff0c;AI与数字经济领域一年一度的科创盛会&#xff0c;2023 IDEA大会在深圳举行。IDEA研究院创院理事长、美国国家工程院外籍院士沈向洋在会上发表主旨演讲&#xff0c;发布IDEA研究院的重磅研产结晶与市场化成果&#xff1b;在大咖云集的论坛环节&#xff0c;多…

除夕不放假HR如何做

国务院办公厅发布了 关于2024年部分节假日安排的通知 全文如下 各省、自治区、直辖市人民政府&#xff0c;国务院各部委、各直属机构&#xff1a; 经国务院批准&#xff0c;现将2024年元旦、春节、清明节、劳动节、端午节、中秋节和国庆节放假调休日期的具体安排通知如下。 …