如何在Vue3项目中使用防抖节流技巧

前言

防抖节流是可以说是一种优化组件性能的技巧,可以有效减少组件中的渲染次数和计算量,从而提高组件的响应速度和用户体验。在Vue3中可以使用`lodash`库中的`debounce`和`throttle`函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数,调用方式都差不多。

防抖:在一定时间内,多次触发同一事件,只执行最后一次操作,常用于输入框搜索、滚动加载等场景。

节流:在一定时间内,多次触发同一事件,限制函数执行频率,防止函数被频繁调用,从而提高页面性能。

一、基于Vue3内置的lodash函数库实现防抖节流

(1)首先导入lodash函数库的防抖和节流方法

import { debounce, throttle } from 'lodash'

(2)随便写两个按钮

<el-button size="small" type="primary" @click="handleDebounceClick($event)"><el-icon :size="16" style="margin-right: 5px;"><Basketball /></el-icon><small>防抖·篮球</small>
</el-button><el-button size="small" type="primary" @click="handleThrottleClick($event)"><el-icon :size="16" style="margin-right: 5px;"><Football /></el-icon><small>节流·足球</small>
</el-button>

(3)随便写两个方法

/*** 防抖·篮球*/
const handleDebounceClick = debounce((evt) => {// ---- ^ 业务逻辑 ----// 定义fn方法const fn = (evt) => {console.log('debounce =>', evt)}// 调用fn方法fn(evt)// ---- / 业务逻辑 ----
}, 1000)/*** 节流·足球*/
const handleThrottleClick = throttle((evt) => {// ---- ^ 业务逻辑 ----// 定义fn方法const fn = (evt) => {console.log('throttle =>', evt)}// 调用fn方法fn(evt)// ---- / 业务逻辑 ----
}, 1000)

(4)运行效果

分别连续点击按钮即可看到效果 ~

二、自行设计实现的防抖节流函数

(1)自行设计实现防抖节流的好处

关于Vue的防抖节流函数库或插件已经有很多了,这个可以自己搜一下并看看效果如何。那为何还需要自行设计实现防抖节流?因为有些需求需要定制化设计,同时你还知道了防抖节流的基本原理。

(2)防抖节流具体实现

/*** 防抖*/
const debounce = (fn, time) => {let timer = nullreturn (...args) => {const context = thisif (timer) {clearTimeout(timer)}timer = setTimeout(() => {fn.call(context, ...args)}, time)}
}/*** 节流*/
const throttle = (fn, time) => {let activeTime = nullreturn (...args) => {const context = thisconst current = Date.now()if (current - activeTime >= time) {fn.call(context, ...args)activeTime = Date.now()}}
}

(2)随便写两个按钮

<el-button size="small" type="primary" @click="handleDebounceClick($event, '你好')"><el-icon :size="16" style="margin-right: 5px;"><Basketball /></el-icon><small>防抖·篮球</small>
</el-button><el-button size="small" type="primary" @click="handleThrottleClick($event, '世界')"><el-icon :size="16" style="margin-right: 5px;"><Football /></el-icon><small>节流·足球</small>
</el-button>

(3)随便写两个方法

/*** 防抖·篮球*/
const handleDebounceClick = debounce((evt, str) => {// ---- ^ 业务逻辑 ----// 定义fn方法const fn = (evt) => {console.log('debounce =>', evt, str)}// 调用fn方法fn(evt)// ---- / 业务逻辑 ----
}, 1000)/*** 节流·足球*/
const handleThrottleClick = throttle((evt, str) => {// ---- ^ 业务逻辑 ----// 定义fn方法const fn = (evt) => {console.log('throttle =>', evt, str)}// 调用fn方法fn(evt)// ---- / 业务逻辑 ----
}, 1000)

(4)运行效果

分别连续点击按钮即可看到效果 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES替换某个索引下的字段的值

ES替换某个索引下的字段的值 前言 在ES的操作中&#xff0c;如果我们已经同步完所有的索引&#xff0c;但是发现同步的时候数据出现了失误&#xff0c;那么在数据量很大的情况下还是要避免重新同步&#xff0c;这个时候就用到了更新替换操作&#xff1a; 操作1 针对于name字…

使用Llama index构建多代理 RAG

检索增强生成(RAG)已成为增强大型语言模型(LLM)能力的一种强大技术。通过从知识来源中检索相关信息并将其纳入提示&#xff0c;RAG为LLM提供了有用的上下文&#xff0c;以产生基于事实的输出。 但是现有的单代理RAG系统面临着检索效率低下、高延迟和次优提示的挑战。这些问题在…

讲座分享|《追AI的人》——中国科学技术大学张卫明教授分享《人工智能背景下的数字水印》

本篇博客记录 2023年11月1日 《人工智能背景下的数字水印》 讲座笔记。 先来明确一下水印在信息隐藏中的定位&#xff0c;如下图&#xff1a; 目录 概述AI for Watermark图像传统攻击方式&#xff08;如JPEG压缩&#xff09;跨媒介攻击方式&#xff08;屏摄&#xff09; 文档水…

自动驾驶常用英文表述

英文单词 英文单词单词意义ego自车&#xff0c;特指自动驾驶汽车自己yield车辆&#xff08;停下来或者减速&#xff09;从而避让其它车辆、行人side pass车辆绕行其它行驶缓慢的车辆、行人nudge车辆横向避让道路上障碍物的动作&#xff0c;与变道和借道行驶不同&#xff0c;避…

生成模型常见损失函数Python代码实现+计算原理解析

前言 损失函数无疑是机器学习和深度学习效果验证的核心检验功能&#xff0c;用于评估模型预测值与实际值之间的差异。我们学习机器学习和深度学习或多或少都接触到了损失函数&#xff0c;但是我们缺少细致的对损失函数进行分类&#xff0c;或者系统的学习损失函数在不同的算法…

Docker DeskTop安装与启动(Windows版本)

一、官网下载Docker安装包 Docker官网如下&#xff1a; Docker官网不同操作系统下载页面https://docs.docker.com/desktop/install/windows-install/ 二、安装Docker DeskTop 2.1 双击 Docker Installer.exe 以运行安装程序 2.2 安装操作 默认勾选&#xff0c;具体操作如下…

升级智能监控,真香!

随着社会的发展与进步&#xff0c;传统依赖看的监控已经无法满足大众的需求&#xff0c;不够智能、识别不精准&#xff0c;传统监控的弊端也日益显现&#xff0c;智能监控升级迫在眉睫。 升级智能监控&#xff0c;不仅能够促进公共安全&#xff0c;同时也能促进社会文明的发展…

macOS 安装brew

参考链接&#xff1a; https://mirrors4.tuna.tsinghua.edu.cn/help/homebrew/ https://www.yii666.com/blog/429332.html 安装中科大源的&#xff1a; https://zhuanlan.zhihu.com/p/470873649

思源笔记搭建

下载docker 在 CentOS 系统上安装 Docker&#xff0c;可以按照以下步骤进行&#xff1a; 卸载旧版 Docker&#xff08;如果之前已经安装过&#xff09;&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-late…

深度学习_8_对Softmax回归的理解

回归问题&#xff0c;例如之前做房子价格预测的线性回归问题 而softmax回归是一个分类问题,即给定一个图片&#xff0c;从猫狗两种动物类别中选出最可靠的那种答案&#xff0c;这个是两类分类问题&#xff0c;因为狗和猫是两类 上述多个输出可以这样理解&#xff0c;假设一个图…

开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化

开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化 前言一、GSYVideoPlayer&#x1f525;&#x1f525;&#x1f525;是什么&#xff1f;二、简单使用1.First、在project下的build.gradle添加2.按需导入3. 常用代码 rtsp流的优化大功告成 总结 前言 本文介绍&#xff0c;…

BUUCTF 另外一个世界 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压得到一个.jpg图片。 密文&#xff1a; 解题思路&#xff1a; 1、这道题我尝试了很多方法&#xff0c;知道看了别人的wp才知道flag在我忽略的地方。将图片在010 Editor中打开&#xff0c;从…

服装手机壳抱枕diy来图定制小程序开发

服装手机壳抱枕diy来图定制小程序开发 一、我们的定位与特色 首先&#xff0c;我们是一个多元化商品定制商城。与其他商城不同的是&#xff0c;我们致力于提供全方位的定制服务&#xff0c;包括手机壳、抱枕、服装、水杯贴图等各类商品。 此外&#xff0c;我们还提供冲洗照片…

PostgreSQL 进阶 - 使用foreign key,使用 subqueries 插入,inner joins,outer joins

1. 使用foreign key 创建 table CREATE TABLE orders( order_id SERIAL PRIMARY KEY, purchase_total NUMERIC, timestamp TIMESTAMPTZ, customer_id INT REFERENCES customers(customer_id) ON DELETE CASCADE);“order_id”&#xff1a;作为主键的自增序列&#xff0c;使用 …

学习笔记二十八:K8S控制器Daemonset入门到企业实战应用

DaemonSet控制器&#xff1a;概念、原理解读 DaemonSet概述DaemonSet工作原理&#xff1a;如何管理PodDaemonset典型的应用场景DaemonSet 与 Deployment 的区别DaemonSet资源清单文件编写技巧 DaemonSet使用案例&#xff1a;部署日志收集组件fluentdDaemonset管理pod&#xff1…

nexus搭建npm私有镜像

假设有一个nexus服务&#xff0c;地址为&#xff1a; http://10.10.33.50:8081/ 创建存储空间 登录后创建存储空间&#xff0c;选择存储类型为File&#xff0c;并设置空间名称为 npm-private 创建仓库类型 2.1 创建hosted类型仓库 创建一个名为 npm-hosted 的本地类型仓库 2.…

天空卫士在全球和中国两大报告中被Gartner列为推荐和代表性供应商

DLP连续五年被Gartner 列为推荐厂商的理由 Gartner2023年9月份发布的《Gartner全球企业数据防泄露市场指南》中&#xff0c;天空卫士被列为DLP领域代表供应商&#xff0c;包括EDLP、IDLP和云原生DLP。 这已经是天空卫士第五次入选《Gartner全球企业数据防泄露市场指南》。天空…

Java基础之类型(内涵面试题)

目录 一、自动类型转换&#xff1a; 二、强制类型转换&#xff1a; 1.强制类型转换可能造成数据丢失&#xff08;溢出&#xff09;。 2.浮点型强转成整型&#xff0c;直接丢掉小数部分&#xff0c;保留整数部分返回。 三、自增、自减&#xff08;、--&#xff09;有关面试题…

relectron框架——打包前端vue3、react为pc端exe可执行程序

文章目录 ⭐前言⭐搭建Electron打包环境&#x1f496; npm镜像调整&#x1f496; 初始化项目&#x1f496; 配置index.js ⭐打包vue3⭐打包react⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于使用electronjs打包前端vue3、react成exe可执行程序。…

DPDK系列之三十五DPDK网络数据发送

一、网络数据发送 DPDK分析了不少&#xff0c;但DPDK主要功能是啥&#xff1f;网络通信。所以还得回归到本源来分析一下其对网络数据是如何发送的&#xff0c;也就是说&#xff0c;DPDK如何保证网络数据的高效发送&#xff0c;采用了什么相应的技术手段。 本篇分析介绍一下DPD…