vue中复用组件使用debounce遇到的问题

文章讨论了在Vue组件中使用lodash的debounce函数可能会导致的状态共享问题,特别是在组件复用时。解决方案是在组件的created钩子中为每个实例单独创建防抖函数,并在unmounted钩子中清除,以防止不同实例间的影响。
摘要由CSDN通过智能技术生成

正常使用:

import {debounce} from "lodash";
import { fetch } from 'xxxx';

export default {
    // ...
    methods: {
        remoteMethod: debounce(function (value = "") {
            const params = {
                keywords: value,
            };
            fetch(params)
                .then((res) => {
                    // ...
                })
        }, 350, ),
    },
}

这样写的话就会有一个问题:

这种方法对于被重用的组件来说是有问题的,因为这个预置防抖的函数是 有状态的:它在运行时维护着一个内部状态。他们共享一个函数,那么它们之间将会互相影响。

那么如何解决这个问题呢?

Vue的文档中也给出了相应的解决方案。

export default {
  created() {
    // 每个实例都有了自己的预置防抖的处理函数
    this.debouncedClick = _.debounce(this.click, 500)
  },
  unmounted() {
    // 最好是在组件卸载时
    // 清除掉防抖计时器
    this.debouncedClick.cancel()
  },
  methods: {
    click() {
      // ... 对点击的响应 ...
    }
  }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值