当前位置: 首页 > wzjs >正文

留言板网站建设总结嵌入式培训机构

留言板网站建设总结,嵌入式培训机构,大连网站建设联合企邦,ps做登录网站需要实现防抖应用场景&#xff1a; 点击【查询】按钮&#xff0c;发送网络请求&#xff0c;等待并接收响应数据 原来点击【查询】的代码&#xff1a; <script setup lang"ts" name"ReagentTransactionsDrawer"> ...... // 查询&#xff0c;没有防…

需要实现防抖应用场景:

点击【查询】按钮,发送网络请求,等待并接收响应数据

原来点击【查询】的代码:

<script setup lang="ts" name="ReagentTransactionsDrawer">
......
// 查询,没有防抖,可以重复点击
const onQueryClick = async () => {// 检查if (queryObj.value.transactionTime.length === 0 &&!queryObj.value.transactionType &&!queryObj.value.materialName) {ElMessage.warning("请输入查询条件!");return;}transactionsList.value = [];let result = await branchWarehouseTransactionsQueryForReagentService(queryObj.value);transactionsList.value = result.data;
};
......
</script><template>
......<el-button class="btn-same-width" type="primary" plain @click="onQueryClick">查询</el-button>
......
</template>

一、使用自定义的防止重复点击组合式函数 hook 

1、编写防止重复点击组合式函数 hook,usePreventReClick.ts

2、导入防止重复点击组合式函数 hook

3、使用 preventReClick 防止重复点击

<script setup lang="ts" name="ReagentTransactionsDrawer">
......
import { usePreventReClick } from "@/hooks/usePreventReClick";
const { preventReClick } = usePreventReClick();// 查询,加装 preventReClick 防抖器,防止重复点击
const onQueryClick = async () => {preventReClick(async () => { // 改动1:增加防抖代码// 检查if (queryObj.value.transactionTime.length === 0 &&!queryObj.value.transactionType &&!queryObj.value.materialName) {ElMessage.warning("请输入查询条件!");return;}transactionsList.value = [];let result = await branchWarehouseTransactionsQueryForReagentService(queryObj.value);transactionsList.value = result.data;}); // 改动2:增加防抖代码
};
......
</script><template>
......<el-button class="btn-same-width" type="primary" plain @click="onQueryClick">查询</el-button>
......
</template>

 防止重复点击组合式函数 hook,usePreventReClick.ts

import { ref } from "vue";type AsyncFunction = () => Promise<any>;/*** 防止重复点击 hook* @returns*/
export function usePreventReClick() {const isClicking = ref(false);const preventReClick = async (fn: AsyncFunction) => {if (isClicking.value) {return;}isClicking.value = true;try {await fn();} finally {isClicking.value = false;}};return {isClicking,preventReClick};
}

 二、使用lodash-es的debounce

1、安装 lodash-es 工具库

2、按需使用导入debounce

3、使用 debounce 防止重复点击

<script setup lang="ts" name="ReagentTransactionsDrawer">
......
import { debounce } from "lodash-es";// 查询,加装 debounce 防抖器,防抖处理(leading: true,立即执行、maxWait: 1000,1秒内至少执行一次)
const onQueryClick = debounce( // 改动1:const onQueryClick = async () => { 改为 const onQueryClick = debounce(async () => {// 检查if (queryObj.value.transactionTime.length === 0 &&!queryObj.value.transactionType &&!queryObj.value.materialName) {ElMessage.warning("请输入查询条件!");return;}transactionsList.value = [];let result = await branchWarehouseTransactionsQueryForReagentService(queryObj.value);transactionsList.value = result.data;}, // 改动2:} 改为 },1000, // 改动3:增加防抖代码{ leading: true, trailing: true, maxWait: 1000 } // 改动4:增加防抖代码
); // 改动5:增加防抖代码
......
</script><template>
......<el-button class="btn-same-width" type="primary" plain @click="onQueryClick">查询</el-button>
......
</template>

三、使用自定义防抖组件 

1、编写防止重复点击按钮组件(防抖按钮组件),BasePreventReClickButton.vue

2、导入防抖组件

3、在模板中使用组件

<script setup lang="ts" name="ReagentTransactionsDrawer">
......
import BasePreventReClickButton from "@/components/base/BasePreventReClickButton.vue";// 查询,使用 BasePreventReClickButton 防抖组件,防止重复点击
const onQueryClick = async () => {// 检查if (queryObj.value.transactionTime.length === 0 &&!queryObj.value.transactionType &&!queryObj.value.materialName) {ElMessage.warning("请输入查询条件!");return;}transactionsList.value = [];let result = await branchWarehouseTransactionsQueryForReagentService(queryObj.value);transactionsList.value = result.data;
};
......
</script><template>
......<BasePreventReClickButton class="btn-same-width" type="primary" plain @click="onQueryClick">查询</BasePreventReClickButton> <!-- 改动1:改用防抖组件 BasePreventReClickButton -->
......
</template>

防止重复点击按钮组件(防抖按钮组件),BasePreventReClickButton.vue

/** * 防止重复点击按钮组件(防抖按钮组件) */
<script setup lang="ts" name="BasePreventReClickButton">
import { ref } from "vue";const props = withDefaults(defineProps<{onClick: () => Promise<void> | void;delay?: number;}>(),{delay: 0}
);// 加载标识
const loading = ref(false);// 点击事件
const handleClick = async (): Promise<void> => {if (loading.value) return;loading.value = true;try {await props.onClick();} finally {let delay = props.delay;if (delay < 0) delay = 0;setTimeout(() => {loading.value = false;}, delay);}
};
</script><template><!-- v-bind="$attrs" 绑定父组件传递的所有属性 --><!-- 设置当前组件的个性属性,可以覆盖父组件属性 :loading="loading" :disabled="loading" @click="handleClick" --><el-button v-bind="$attrs" :loading="loading" :disabled="loading" @click="handleClick"><!-- 插槽 --><slot></slot></el-button>
</template><style scoped lang="scss"></style>
http://www.dtcms.com/wzjs/840552.html

相关文章:

  • 门户网站模板 免费网站建设公司公司介绍
  • 购物网站怎么做推广电商培训类网站模板下载
  • 深圳设计周展会2023时间为什么做网站结构优化
  • 赤坎手机网站建设公司静态网页框架用什么软件做
  • 上海哪学网站建设优化wordpress旅游网模板
  • 北京市住房城乡建设厅网站首页资讯网站
  • 做网站和seo哪个好采购管理系统软件
  • 潍坊做网站的公司wordpress效果
  • 网站建设搜索代码推广代理
  • 自助个人网站注册wap开头的网站
  • 盐城网站建设培训班有哪些做排球比赛视频网站
  • 广东网站建设定制哪个公司网络最好
  • 长沙网站 微信建设突发 佛山出大事
  • 房产网站的建设wordpress 设置footer
  • 欧卡乐网站建设网页微信删除聊天记录
  • 化工网站开发深圳网站设计要点
  • 有网站吗给一个上海人才招聘哪个网站好
  • 温州专业微网站制作多少钱ui设计前景怎样
  • 罗田住房和城乡建设局网站传智播客培训机构官网
  • 上海网站建站服务商业网站建设的意义
  • 中国建设网站首页wordpress自定义字段图文
  • 商丘网站制作电话wordpress禁止ip访问
  • 免费图片素材网站推荐做电容的网站
  • com网站免费注册抖音广告
  • 如何撤销网站上信息怎么查看自己的网站是否被百度收录
  • 做素材类的网站赚钱吗哪个网站可以免费做网页
  • 红星美凯龙建设事业中心网站西安专业网站建设公司排名
  • 城阳网站开发公司电话网页设计素材分析
  • 游戏公司做网站设计赚钱吗asp.net网站转php
  • 易企cms网站模板福建网站开发公司电话