记录--alova组件使用方法(区别axios)

这篇具有很好参考价值的文章主要介绍了记录--alova组件使用方法(区别axios)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--alova组件使用方法(区别axios)

在我们写项目代码时,应该更加专注于业务逻辑的实现,而把定式代码交给js库或工程化自动处理,而我想说的是,请求逻辑其实也是可以继续简化的。

你可能会说,用axios或fetch api就够了啊,哪有什么请求逻辑,那可能是你还没有意识到这个问题,作为一个前端开发,你肯定也遇到过这些问题:

  • 处理分页逻辑
  • 表单处理逻辑
  • 处理请求防抖逻辑
  • 处理轮询检查
  • 处理缓存处理
  • 处理加载状态
  • 处理错误处理
  • 验证码发送
  • 文件上传
  • ...

这些问题,如果你正在使用 axios 或 fetch api,你需要编写大量的代码来处理这些问题,但我想说,他们其实更多的也都是固定的模板代码,也可以被精简掉。

在今天你可以使用 alova 来处理它们,alova提供了大量日常业务中常用的请求模块,你只需要简单配置几行代码,alova 就能自动帮你管理请求状态,优化网络体验,那些烦人的分页逻辑、轮询检查、缓存处理,全都不用你操心了,让你更加专注于业务逻辑。

alova的学习成本更低

alova 借鉴了 axios 和ahooks-useRequest的设计,让大家更容易上手,学习成本更低。

alova 官网在这里。

alova 自从 2023 年 4 月份正式对外发布以来,在 Issues 和 Disscussion 中收到了来自世界各地的开发者积极参与的信息,深感荣幸。

如果你也喜欢 alovajs,请在Github 仓库中贡献一颗 star,这对我们非常重要。

有任何问题,你可以加入以下群聊咨询,也可以在github 仓库中发布 Discussions,如果遇到问题,也请在github 的 issues中提交,我们会在最快的时间解决。

  • 加入在 Discord 社区参与交流
  • 加入 QQ 频道社区参与交流

下面我们来看看如何通过简单配置,就能帮你解决各种复杂场景下的请求问题。

基础请求

基本的请求,适用于初始化信息,自带了请求相关的各种状态。

以 vue3 为例。

<template>
  <div>
    <div v-if="loading">loading...</div>
    <div v-else-if="error">error: {{ error }}</div>
    <div v-else>
      <div>
        <span>id: {{ data.title }}</span>
        <span>title: {{ data.time }}</span>
      </div>
    </div>
  </div>
</template>

<script setup>
  import { useRequest } from "alova";

  // 和axios相似的参数风格
  const todoDetail = alova.Get("/todo", {
    params: {
      id: 1,
    },
  });

  const {
    loading,
    data,
    error,
    onSuccess,
    onError,
    onComplete,
    send,
    abort,
    update,
  } = useRequest(todoDetail);
  onSuccess((event) => {
    console.log("success", event);
  });
  onError((event) => {
    console.log("error", event);
  });
  onComplete((event) => {
    console.log("complete", event);
  });
</script>

useRequest 会自动帮你管理 loading、data、error 等状态,不需要自己控制!

useRequest 详细文档

状态变化请求

在数据筛选、搜索等交互中,可以通过 useWatcher 来监听状态变化并发送请求,返回值也包含与 useRequest 相同的状态、事件函数、操作函数。

useWatcher(() => filterTodoList(page, keyword), [keyword, page], {
  debounce: [500, 0], // 请求级的防抖参数
});

它还有请求防抖、保证请求时序、过滤状态变化时是否发送请求等功能,超方便!

useWatcher 详细文档

预加载数据

可以用 useFetcher 预加载数据,不需要直接处理响应,但会更新相关状态:

const { fetching, error, fetch } = useFetcher();
fetch(todoDetail);

useFetcher 详细文档

分页请求

分页场景下,page、pageSize、pageCount、total 等等好多状态要自己维护,还要写一堆逻辑来判断何时应该发送请求!

如果用 alovajs 提供的分页 Hook,你就只需要这样:

const {
  // 加载状态
  loading,

  // 列表数据
  data,

  // 是否为最后一页
  // 下拉加载时可通过此参数判断是否还需要加载
  isLastPage,

  // 当前页码,改变此页码将自动触发请求
  page,

  // 每页数据条数
  pageSize,

  // 分页页数
  pageCount,

  // 总数据量
  total,
} = usePagination((page, pageSize) => queryStudents(page, pageSize));

// 翻到上一页,page值更改后将自动发送请求
const handlePrevPage = () => {
  page.value--;
};

// 翻到下一页,page值更改后将自动发送请求
const handleNextPage = () => {
  page.value++;
};

// 更改每页数量,pageSize值更改后将自动发送请求
const handleSetPageSize = () => {
  pageSize.value = 20;
};

是不是清爽很多,节省了超多重复代码。

usePagination 详细文档

表单提交

表单处理也很头疼吧?alova 的 useForm 直接帮你搞定表单提交、表单草稿、自动重置表单项、多页共享数据啥的。

const {
  form,
  send: submitForm,
  updateForm,
} = useForm((formData) => submitData(formData), {
  initialForm: {
    title: "",
    content: "",
    time: "",
  },
  resetAfterSubmiting: true,
});

useForm 详细文档

验证码实现

别再自己做倒计时了,这有!

const { loading: sending, send: sendCaptcha } = useCaptcha(
  () => sendCaptcha(mobile),
  {
    initialCountdown: 60,
  }
);

useCaptcha 详细文档

文件上传策略

更简单的文件上传策略,支持对 base64、Blob、ArrayBuffer、Canvas 数据的自动识别和转换,还可以多文件同时上传、图片预览图生成

const {
  fileList
  loading,
  progress
} = useUploader(({ file, name }) => uploadFile(file, name), {
  limit: 3,
  accept: ['png', 'jpg', 'gif'],
  imageTempLink: true
});

useUploader 详细文档

自动重新拉取数据

可以在浏览器 tab 切换时拉取最新数据、浏览器聚焦时拉取最新数据、网络重连时拉取最新数据、轮询请求自动重新拉取数据,可以同时配置以上的一个或多个触发条件,也可以配置节流时间来防止短时间内触发多次请求,例如 1 秒内只允许触发一次。

useAutoRequest(todoDetail, {
  enablePolling: 2000,
  enableVisibility: true,
  enableFocus: true,
  enableNetwork: true,
  throttle: 1000
}

useAutoRequest 详细文档

跨组件请求策略

跨组件或模块触发请求相关操作,消除组件层级的限制,在任意组件中快速地触发任意请求的操作函数,例如,你可以某个组件中更新了菜单数据后,重新触发侧边菜单栏的重新请求,从而刷新数据。当操作了列表数据后,触发列表更新。

// 组件A创建代理
useRequest(todoDetail, {
  middleware: actionDelegationMiddleware("someAction"),
});

// 组件B内触发操作
accessAction("someAction", (actions) => {
  actions.send();
});

actionDelegationMiddleware 详细文档

请求重试策略

在重要的请求上使用它,可以提高请求的稳定性,可以自定义设置是否重试,以及重试延迟,还有手动停止重试

const { onRetry, onFail, stop } = useRetriableRequest(pay, {
  retry(error) {
    return /network timeout/i.test(error.message);
  },
  backoff: {
    delay: 2000,
  },
});

useRetriableRequest 详细文档

SSE

可以直接通过 SSE 进行请求,它可以通过全局响应和方法实例的函数 transformData 自动转换数据,还提供了对 EventSource 对象的全部控制。

const { readyState, data, eventSource, onMessage, onError, onOpen, on } =
  useSSE(() => chatGPT(), {
    withCredentials: true,
    interceptByGlobalResponded: true,
  });

useSSE 详细文档

本文转载于:

https://juejin.cn/post/7301281320666693667

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--alova组件使用方法(区别axios)文章来源地址https://www.toymoban.com/news/detail-746284.html

到了这里,关于记录--alova组件使用方法(区别axios)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3+ts+vite中封装axios,使用方法从0到1

    http.ts文件内容: methods.ts文件内容: api/user.ts 用户相关接口 types/user.d.ts定义接口ts类型 请求成功测试

    2024年02月02日
    浏览(53)
  • 【JavaScript】对象 ② ( 对象使用 | 调用对象属性 | 调用对象方法 | 变量与属性区别 | 函数与方法区别 )

    使用字面量创建对象要点 : 在上一篇博客 【JavaScript】对象 ① ( 对象概念 | 对象使用场景 | 使用字面量创建对象 | 空对象字面量 | 小括号 / 中括号 / 大括号 作用 ) 中 , 介绍了 使用 字面量 创建对象 , 有如下要点 : 键值对 : 对象字面量 中的 属性 和 方法 都是以 \\\" 键值对 \\\" 的形

    2024年04月14日
    浏览(54)
  • 什么是组件,以及前端各种框架组件的使用方法

    🙂博主:小猫娃来啦 🙂文章核心: 介绍什么是组件,以及前端各种框架组件的使用方法 ⭐组件就像是搭积木一样的东西,可以用来构建软件或者系统。每个组件都有自己独立的功能和任务,就像一个小小的部件。你可以把这些小部件组合在一起,形成一个完整的应用程序

    2024年02月12日
    浏览(47)
  • U盘使用记录删除方法

    1:先在系统里添加环境变量“ devmgr_shownonpresent_devices ”值为“ 1 ” 2:打开设备管理器,然后查看隐藏设备,展开磁盘驱动器和储存卷两处,然后把跟U盘有关的删除掉。 3:鼠标单击“我的电脑”右键选择“管理”打开,然后把可移动存储相关的信息删除。 4: 把加入的系统

    2024年02月04日
    浏览(40)
  • Linux - tar命令使用方法记录

    (存档指tarball) -c, --create                     创建新存档 -x                                   从存档中提取文件 -z                                   通过gzip过滤存档 -v                                   显示详情,详细列出已处理文件 -f             

    2024年02月16日
    浏览(41)
  • python使用装饰器记录方法耗时

    python使用修饰器记录方法耗时,目的是每当方法执行完后,可以记录该方法耗时,而不需要在每个方法的执行前后,去创建一个临时变量,来记录耗时。 方式一(不推荐): 在每个方法的执行前后,去创建一个临时变量,来记录耗时,代码如下,缺点在于,如果有10个、10

    2024年02月13日
    浏览(49)
  • vivado中ila的使用方法记录

    在FPGA的开发中,当完成代码设计后,为了验证代码的准确性和各种不同条件下的可靠性,往往需要优先想到通过逻辑仿真进行相关验证。使用逻辑仿真进行验证虽然可以周密的考虑给出不同输入条件下的输出结果或交互结果,但是也其相对局限性:使用仿真需要设计人员写

    2024年02月16日
    浏览(48)
  • vue3父组件使用ref调用子组件方法

    在vue2中,父组件通过ref调用子组件的方法只需要给子组件添加ref属性,然后使用this.$refs.XXX.method即可 但是在vue3中,子组件需先使用defineExpose将方法暴露给父组件 调用方法如下: 1、使用getCurrentInstance 2、使用ref函数创建一个响应式的引用,并将其绑定到子组件上

    2024年01月16日
    浏览(49)
  • 一文解释python中的实例方法,类方法和静态方法作用和区别是啥?该如何使用

    我们都知道 ,python类中有三种常见的方法 ,分别是实例方法 ,类方法和静态方法 。那么这几个方法到底有什么作用 ? 它们之间有什么区别 ?该如何使用 ? 带着这些问题 ,下面我们就来了解下这三种方法 。 若我们要实现一个学生的类 ,里面要实现3功能,分别是: 功能

    2024年02月10日
    浏览(36)
  • uniapp组件库SwipeAction 滑动操作 使用方法

    目录 #平台差异说明 #基本使用 #修改按钮样式 #点击事件 #API #Props #Event 该组件一般用于左滑唤出操作菜单的场景,用的最多的是左滑删除操作。 注意 如果把该组件通过v-for用于左滑删除的列表,请保证循环的 :key 是一个唯一值,可以用数据的id或者title替代。 不能是数组循环

    2024年01月22日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包