小程序列表循环中使用独立lodash防抖

列表循环中使用lodash的防抖功能时,关键是要确保每个列表项(或每个需要防抖的事件)都有其独立的防抖函数实例。这样,当用户快速触发相同或不同的列表项上的事件时,每个列表项的防抖逻辑都是独立运行的,互不影响。

如果列表项可能会被删除,你也应该在删除逻辑中取消对应的防抖函数,以避免内存泄漏,不过在组件beforeDestroy生命周期钩子中取消了所有防抖函数,这通常已经足够了

<template>  
  <view>
    <view v-for="(item, index) in items" :key="item.id">
    	<button type="default" class="common-mini-btn-blank" @click="createDebounced(item.id)">退款</button>
    </view>  
  </view>  
</template>  
  
<script>  
import _ from 'lodash';  
export default {  
  data() {  
    return {  
      // 列表数据  
      items: [  
        { id: 1, name: '项目1' },  
        { id: 2, name: '项目2' },  
        { id: 3, name: '项目3' }  
      ],  
      // 存储每个item的防抖函数  
      debounceFunctions: {}  
    };  
  },  
  methods: {  
    // 创建一个防抖函数并绑定到点击事件上  
    // 如果该item的防抖函数已存在,则直接返回;否则,创建一个新的  
    createDebounced(itemId) {
      if (!this.debounceFunctions[itemId]) {  
        this.debounceFunctions[itemId] = _.debounce((id) => {  
          this.refundFn(id);  
        }, 500, { leading: false, trailing: true });  
      }  
      // 调用防抖函数,并传入itemId  
      this.debounceFunctions[itemId](itemId);  
    }  
  },
  // 实际的处理函数  
  refundFn(itemId) {  
    console.log('--退款--',itemId);
    // 这里可以添加更多处理逻辑,如API调用等  
  },  
  // 组件销毁时取消所有防抖函数  
  beforeDestroy() {
    Object.values(this.debounceFunctions).forEach(func => {  
      func.cancel();  
    });  
  }  
};  
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值