广告
返回顶部
首页 > 资讯 > 精选 >vue禁止重复点击发送多次请求如何实现
  • 355
分享到

vue禁止重复点击发送多次请求如何实现

2023-07-05 09:07:42 355人浏览 泡泡鱼
摘要

本篇内容介绍了“Vue禁止重复点击发送多次请求如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!某些情况下,为了阻止用户短时间内重复点击

本篇内容介绍了“Vue禁止重复点击发送多次请求如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

某些情况下,为了阻止用户短时间内重复点击某个按钮,导致前端后端重复发送多次请求。

1.通过控制 loading 来设置 loading,或者 disabled

刚开始直接给按钮加上loading效果,即在请求前 loading为true, 在请求结束finally里loading置为false,以达到阻止重复点击的问题,但部分请求短时间内,用户依然可以双击触发多次请求。

2.使用Vue自定义指令

// 全局注册自定义指令Vue.directive("resetClick", {  inserted(el, binding) {    el.addEventListener("click", () => {      if (!el.disabled) {        el.disabled = true;        el.style.cursor = "not-allowed";        setTimeout(() => {          el.disabled = false;          el.style.cursor = "pointer";        }, binding.value || 1000);      }    });  },}); // 组件内使用<el-button type="primary" v-resetClick="1000" @click="confirm">    确 定</el-button>

3. 使用debounce函数

工具类util.js文件中定义 防抖函数 (或直接使用第三方库 throttle-debounce等)

// 防抖debounce代码:function debounce(fn, delay) {  let timeout = null // 创建一个标记用来存放定时器的返回值  return function (e) {    // 每当用户输入的时候把前一个 setTimeout clear 掉    clearTimeout(timeout)    // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数    timeout = setTimeout(() => {      fn.apply(this, arguments)      timeout = null    }, delay)  }}

vue组件中使用

<template>  <div>    <el-button type="primary" @click="handleClick">快速连续点击</el-button>  </div></template> <script>import { debounce } from '@/util/util.js' export default {  data() {    return {}  },  methods: {    handleClick: debounce(() => {      console.log('删除操作等业务逻辑')    }, 500),  },}</script> <style></style>

以上两种方式都存在问题

这两种方式已经基本上能满足防重复点击的需求,但实际测试时发现延时的时间不好控,如果延时时间短(<150ms)快速点击还是会有几率多次触发事件。如果延时时间长(>600ms),用户点击后会有个明显的延时过程才能触发事件,用户体验就不太好。

首先明确下我们想要实现的效果。

  • 用户在按下按钮的时候立即触发点击事件。

  • 用户在快速连续按下按钮的时候只触发第一次的点击事件。

  • 用户不间断疯狂点击按钮(暴力测试),也只是立即触发第一次的事件,在疯狂点击的过程中不会触发事件,即使超时时间已经过去。

4.最终解决方案lodash

lodash官方文档&mdash;&mdash;debounce

npm i lodash -S

组件中使用

<template>  <div>    <el-button type="primary" @click="handleClick">快速连续点击</el-button>  </div></template> <script>import { debounce } from 'lodash' export default {  data() {    return {}  },  methods: {    handleClick: debounce(      () => {        console.log('删除操作等业务逻辑')      },      500,      {        leading: true, // 在延迟开始前立即调用事件        trailing: false, // 在延时结束后不调用,保证事件只被触发一次      },    ),  },}</script>

“vue禁止重复点击发送多次请求如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: vue禁止重复点击发送多次请求如何实现

本文链接: https://www.lsjlt.com/news/350785.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue禁止重复点击发送多次请求如何实现
    本篇内容介绍了“vue禁止重复点击发送多次请求如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!某些情况下,为了阻止用户短时间内重复点击...
    99+
    2023-07-05
  • vue 禁止重复点击发送多次请求的实现
    目录1.通过控制 loading 来设置 loading,或者 disabled2.使用Vue自定义指令3. 使用debounce函数4.最终解决方案lodash某些情况下,为了阻止...
    99+
    2023-03-06
    vue 禁止重复点击 vue 发送多次请求
  • 详解vue如何防止用户多次点击请求
    在现代web应用程序中,用户操作经常需要与服务器进行交互。用户频繁点击按钮或提交表单可能会导致前端向服务端发送多个请求,这会导致性能下降和资源浪费。Vue.js是一个流行的JavaScript框架,提供了一种解决此问题的方法。在本文中,我们...
    99+
    2023-05-14
  • vue中axios如何实现重复点击取消上一次请求封装
    这篇文章主要为大家展示了“vue中axios如何实现重复点击取消上一次请求封装”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中axios如何实现重复点击取...
    99+
    2022-10-19
  • vue怎么实现重复点击取消上一次请求封装
    本篇内容主要讲解“vue怎么实现重复点击取消上一次请求封装”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现重复点击取消上一次请求封装”吧!使用场景重复点击或者多tab标签使用一个视图...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作