vue中的防抖和节流

本文介绍了如何在Vue组件中使用防抖(debounce)和节流(throttle)技术,避免因频繁事件触发导致的不必要的请求。通过在created钩子中创建防抖函数,并在观察者回调和组件卸载时管理其执行,实现事件处理的延迟执行策略。
摘要由CSDN通过智能技术生成

在监听事件时,这些事件总是被频繁触发,可能几秒一次。如果只对每次事件都发起fetch请求,那你无敌了孩子。

我们需要做的就是让这个事件的执行速度慢慢的,这种减缓事件处理程序的执行速度科技就是防抖(debounce)和节流(throttle)。

1.观察者防抖

我们先从一个简单的小组件开始,我们的任务就是将输入框里的文本输出到控制台

<template>
    <input v-model="value" type="text">
    <p>{{ value }}</p>
</template>
<script>
export default {
    data() {
        return {
            value: ""
        }
    },
    watch: {
        value(newvalue, oldvalue) {
            console.log("Value changed:", newvalue)
        }
    }
}
</script>
<style></style>

输入框输入集合字符,每次输入时,值都会被log到控制台。

我们通过观察者监听value数据属性来实现了打印日志。如果你想在观察者的回调中加入一个使用value作为参数的GET请求,那你应该不会想要太过频繁的发起请求。

我们来对打印控制台这个行为做一个防抖,注意创建一个防抖函数!!!!!

在观察者内部调用该函数。

<template>
    <input v-model="value" type="text">
    <p>{{ value }}</p>
</template>
<script>
import debounce from "lodash.debounce"
export default {

    data() {
        return {
            value: ""
        }
    },
    watch: {
        value(...args) {
            this.debouncedWatch(...args)
        }
    },
    created() {
        this.debouncedWatch = debounce((newValue, oldValue) => {
            console.log('New value', newValue)
        }, 500)
    },
    beforeUnmount() {
        this.debouncedWatch.cancel()
    }
}
</script>
<style></style>

只有在最后一次输入的500ms之后,才会将新的输入值打印日志到控制台。

这说明防抖在生效。

实现防抖的三个简单步骤:

1.在 create() 钩子 里,创建 防抖回调,并将其赋值到实例上:this.debouncedWatch = debounce(..., 500)。

2.在 观察者 回调 watch.value() { ... }  中 传入正确的参数 调用 this.debouncedWatch()。

3.最后,beforeUnmount() 钩子中 调用 this.debouncedWatch.cancel() ,在卸载组件之前,取消所有还在 pending 的 防抖函数执行
 

总结:

在vue中可以很轻松的实现防抖和节流。

核心逻辑就是,在created()钩子里,创建防抖或节流的回调,并赋值在实例上:

 created() {
        this.debouncedWatch = debounce((newValue, oldValue) => {
            console.log('New value', newValue)
        }, 500)
    },

观察者内部调用实例上的防抖函数:

watch: {
        value(...args) {
            this.debouncedWatch(...args)
        }
    },

在这之后每次调用就算执行频率非常的高,内部的回调也只会让你慢慢的!!!!!(缓冲执行)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值