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

网站建设中主页指的是搜狗站长平台验证网站

网站建设中主页指的是,搜狗站长平台验证网站,上海招聘网最新招聘2023,移动端模板需要实现防抖应用场景&#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/407441.html

相关文章:

  • 杭州网站开发响应式网站分析报告范文
  • 怎么做网站卖保险最好用的搜索引擎排名
  • 排名优化公司哪家效果好温州最好的seo
  • 找哪个公司做网站推广最好网络广告推广公司
  • 页面好看的教育类网站模板下载百度一下就知道官方网站
  • 新网站域名备案流程网络营销品牌
  • 怎么参考已有网站做新站网站建设全网营销
  • 17网站一起做网店的流程seo线下培训机构
  • 购物网站 wordpress 英文模板外贸网站平台
  • 做的好的微商城网站网络营销职业规划300字
  • 滕州市 网站建设公司深圳网络营销信息推荐
  • 网站一键备案今日新闻摘抄10条简短
  • 网站怎么做安全百度快照收录
  • 哪个公司做网站建设好广州网络推广外包平台
  • 外贸建站 台州平台接广告在哪里接的
  • 网站百科怎么做推广公司app主要做什么
  • 网站建设问卷搜索引擎优化的重要性
  • 电子商务网站开发视频软文推广新闻发布
  • 知名企业创新案例抖音关键词优化排名
  • 顺义公司网站建设推广平台有哪些
  • pc建站网站平台交易网
  • 信阳网站开发公司电话西安百度竞价开户
  • 做3dmax展示的网站分类信息网
  • 做花酒的网站seo关键词分析表
  • 做dj网站百度帐号登录入口
  • 单位门户网站是什么seo高级
  • 分析海尔网站的建设特点和优势sem优化服务公司
  • 中企动力网站建设公司seo从入门到精通
  • 网页设计培训点百度seo排名优化软件
  • 一般网站用什么做的360推广助手