vue使Lodash实现节流和防抖的问题

使用lodash实现节流和防抖的问题:

首先下载lodash插件

cnpm i lodash -S

在项目使用防抖

防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

一般我们应用在 搜索框防抖,如果用户只要输入一个字符,就会触发请求,不仅从资源上来说是很浪费的,而且实际应用中,用户也是输出完整的字符后,才会请求,下面我们优化一下:

<div class=''>
	<input type="text" v-model="value" @input="input" />
</div>
<script>
// 引入lodash
import _ from 'lodash'
export default {
    data() {
        return {
            value:''
        };
    },
    methods: {
        input:_.debounce(()=>{
            console.log(this);  // undefined
        },1000)
    }
};
</script>

❓❓在vue中methods箭头函数的this指向undefined问题:

以上代码在浏览器会输出undefined。哎,不应该指向window吗?
搞清楚这个问题,我们首先要知道:

  1. 箭头函数的this指向父级作用域的this
  2. vue默认开启了严格模式
  3. 全局作用域下的函数this指向window,在严格模式下指向undefined

所以在debounce里面不要使用箭头函数,我们要这样写才有效:

methods: {
    input:_.debounce(function(){
        console.log(this.value);
    },1000)
}

在项目使用节流

在一个单位时间内,只能触发一次

一般我们应用在 倒计时发送验证码,当用户点击按钮进行倒计时,不小心再次点击,这样倒计时会重新进行计数,这样对用户体验很不好,下面我们优化一下:

methods: {
    input:_.throttle(function(){
        console.log(this.value);
    },1000)
}
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中使用lodash实现节流防抖的方法如下: 1. 安装lodash库:在项目根目录下打开命令行工具,执行以下命令安装lodash库: ``` npm install lodash ``` 2. 导入lodash库:在需要使用节流防抖的组件中,导入lodash库的相关函数: ```javascript import { debounce, throttle } from 'lodash'; ``` 3. 使用节流函数:使用`throttle`函数来实现节流。`throttle`函数会在指定的时间间隔内只执行一次函数,可以用于限制频繁触发的事件,例如滚动、拖拽等。以下是一个使用节流函数的示例: ```javascript export default { data() { return { scrollHandler: null }; }, methods: { handleScroll() { // 处理滚动事件的逻辑 console.log('Scroll event'); } }, mounted() { this.scrollHandler = throttle(this.handleScroll, 200); // 设置节流时间为200ms window.addEventListener('scroll', this.scrollHandler); }, beforeDestroy() { window.removeEventListener('scroll', this.scrollHandler); } } ``` 在上述代码中,使用`throttle`函数将`handleScroll`方法包装起来,设置节流时间为200ms。在组件的`mounted`生命周期钩子中,将节流后的处理函数添加到`scroll`事件监听器中,保证在指定时间间隔内只执行一次。 4. 使用防抖函数:使用`debounce`函数来实现防抖。`debounce`函数会在指定的时间间隔后执行函数,如果在这个时间间隔内又触发了同样的函数,则重新计时。以下是一个使用防抖函数的示例: ```javascript export default { data() { return { inputHandler: null, inputValue: '' }; }, methods: { handleInput() { // 处理输入事件的逻辑 console.log('Input event'); } }, mounted() { this.inputHandler = debounce(this.handleInput, 500); // 设置防抖时间为500ms } } ``` 在上述代码中,使用`debounce`函数将`handleInput`方法包装起来,设置防抖时间为500ms。在组件的`mounted`生命周期钩子中,将防抖后的处理函数赋值给`inputHandler`。 在模板中,将防抖处理函数绑定到相应的事件上: ```html <input type="text" v-model="inputValue" @input="inputHandler"> ``` 这样,在输入框输入内容时,只有在500ms内没有再次输入才会触发防抖后的处理函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值