Vue3 项目防止按钮重复点击(重复请求接口)

简介: Vue3 项目防止按钮重复点击(重复请求接口)

场景

1.保存提交按钮不小心点击了多次。

2.由于网络服务器卡等原因点击事件没有及时响应又点击了一次,造成数据的重复提交和保存,数据的异常。

3.resize、scroll,输入框内容校验等频繁操作。

原因

由于axios提交数据为异步提交,点击提交按钮是通过xmlhttprequest向后端发送异步请求,发送请求后后端返回数据需要时间处理,如果第一次点击的请求尚未完成,又接二连三地提交了几次,同时后面发送的请求都被后台处理了,这种情况如果是读取数据不会有太大影响,但是涉及到数据提交保存或者提交之后多表数据处理就麻烦了,而且此类现象造成的数据都不正常,所以此种情况务必要避免。

解决方法 :

一.按钮禁用控制:

原理:当第一次点击按钮进入事件,按钮状态变为禁用状态,

<template>
  <!-- 按钮 -->
  <el-button type="primary" @click="publish" :disabled="disabledFlag">添加</el-button>
</template>
<script setup>
  const disabledFlag = ref(false);
  const publish = () => {
    // 调用接口之前禁用按钮,防止多次点击调用接口
    disabledFlag.value = true;
    // 调用接口进行添加填报数据
    axios({
      method: 'post',
      url: '',
      data: qs.stringify({}),
    })
      .then((res) => {
        // 接口返回后
        disabledFlag.value = false;
        ElNotification.success({
          title: 'Success',
          message: '添加成功',
          offset: 100,
        });
      })
      .catch((err) => {
        console.log(err);
        disabledFlag.value = false;
      });
  };
</script>
<style></style>

二. loading事件等待控制:

原理:当第一次点击按钮进入事件,打开loading函数进行等待,当请求返回后台数据后按钮再恢复至可点击状态或者loading关闭

<template>
  <!-- 按钮 -->
  <el-button type="primary" @click="publish" :loading="loading">添加</el-button>
</template>
<script setup>
  const loading = ref(false);
  const publish = () => {
    //打开loading等待
    loading.value = true;
    // 调用接口进行添加填报数据
    axios({
      method: 'post',
      url: '',
      data: qs.stringify({}),
    })
      .then((res) => {
        // 接口返回后
        loading.value = false;
        ElNotification.success({
          title: 'Success',
          message: '添加成功',
          offset: 100,
        });
      })
      .catch((err) => {
        console.log(err);
        loading.value = false;
      });
  };
</script>

方法虽然笨了点,但是可以完全避免重复点击情况,此方法只有第一次点击调用接口返回数据后才会被点击


相关文章
|
4天前
|
前端开发 JavaScript API
基于Vue3+Hooks实现4位随机数和60秒倒计时
本文介绍了如何在Vue3中使用Hooks API来实现生成4位随机数和执行60秒倒计时的功能,并提供了详细的代码示例和运行效果展示。
21 1
基于Vue3+Hooks实现4位随机数和60秒倒计时
|
3天前
|
JavaScript 算法 API
Vue 3有哪些新特性
【8月更文挑战第16天】Vue 3有哪些新特性
15 1
|
3天前
|
JavaScript
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)
该博客文章介绍了如何在Vue 2框架下实现前后端分离的商品信息展示和详情页跳转,包括排序筛选、详情展示、加入购物车和分享功能。
如何通过点击商品的信息(图片或者文字)跳转到更加详细的商品信息介绍(前后端分离之Vue实现)
|
3天前
|
JavaScript
在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件
这篇文章介绍了在Vue中如何使用Swiper插件创建轮播图,解决Swiper左右切换按钮不生效的问题,并展示了如何将Swiper轮播图抽离成一个可复用的公共组件,同时提供了详细的安装、配置和优化建议。
在Vue中使用Swiper轮播图、同时解决点击轮播图左右切换按钮不生效的问题、同时将轮播图抽离出为一个公共组件
|
4天前
|
JavaScript UED
如何在Vue3项目中使用防抖节流技巧
在Vue 3项目中使用防抖和节流技巧以优化组件性能,包括使用`lodash`库和自定义实现这两种方法。
7 0
如何在Vue3项目中使用防抖节流技巧
|
3天前
|
JavaScript
创建 Vue3 项目
创建 Vue3 项目
9 0
|
3天前
|
JavaScript
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
这篇文章介绍了在Vue项目中如何实现执行删除等危险操作时的二次确认机制,使用Element UI的`el-popconfirm`组件来弹出确认框,确保用户在二次确认后才会执行删除操作。
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
|
3天前
|
JavaScript
如何创建一个Vue项目(手把手教你)
这篇文章是一篇手把手教读者如何创建Vue项目的教程,包括使用管理员身份打开命令行窗口、找到存放项目的位置、通过vue-cli初始化项目、填写项目信息、进入项目目录、启动项目等步骤,并提供了一些常见第三方库的引入方法。
如何创建一个Vue项目(手把手教你)
|
3天前
|
前端开发
StringBoot+Vue实现游客或用户未登录系统前、可以浏览商品等信息、但是不能购买商品或者加入购物车等操作。登录系统显示用户的登录名(源码+讲解)
这篇文章介绍了使用StringBoot+Vue实现用户登录状态判断的方法,包括前端加载用户信息和后端设置session的源码示例。
|
3天前
|
JavaScript 编译器
成功解决:Module build failed: Error: Vue packages version mismatch
这篇文章记录了解决Vue项目中遇到的"Module build failed: Error: Vue packages version mismatch"错误的步骤,原因是项目中Vue依赖的版本不一致,解决方法是删除`node_modules`后重新安装指定版本的Vue和`vue-template-compiler`,确保版本匹配,最终成功运行项目。
成功解决:Module build failed: Error: Vue packages version mismatch