应用场景:【暂存】【提交】都是同一个接口,但是用户有可能连续点击提交而误触
解决思路:
(一)引用vue3 防抖
// 防抖函数
npm install lodash
(二) 创建一个防抖函数(也可以封装js文件方便调用)
<template>
// 省略上方表单输入内容
<van-button block type="primary" @click="debouncedSubmit('暂存')">暂存</van-button>
<van-button block type="primary" @click="debouncedSubmit('提交')">提交</van-button>
</template>
<script setup lang="ts">
const debounce = (fn, delay) =>{
// 防抖函数
let timeout = null;
return function() {
let context = this, args = arguments;
clearTimeout(timeout);
let callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, delay);
if (callNow) fn.apply(context, args);
};
}
const submit = async (val) => {
if(val == '暂存'){
// 省略提交按钮处理逻辑
}else if(val == '提交'){
// 省略提交按钮处理逻辑
}
}
const debouncedSubmit = debounce(submit, 2000); // 2秒之内重复点击无效
</script>