zoukankan      html  css  js  c++  java
  • Vue中使用函数防抖

    情况

    在最近的项目,遇到一个需求是要监控表单输入改变的时候,自动计算另一个表单项的值.
    里面需要大量的循环和判断,导致页面卡顿,特别是连续输入的时候,整个页面甚至可能卡死.
    经过多次尝试,都有this指向问题,而导致没有得到预期的效果.

    解决

    最终使用lodash里面的防抖函数debounce得以解决,其中还有两个注意的关键点就是,
    创建的防抖函数,不是在methods里面定义,而是写在data里面定义.
    然后在created()或者beforeMount()创建防抖方法,接着把原来的方法替换成防抖方法即可.

    以下是粗略的关键代码:

    export default {
        data() {
            // 防抖方法
            debounceHandleValuesChange: undefined
        },
        beforeMount() {
            // 设置防抖方法(周期内按下多次只会执行最后一次)
            // 注意: 这里只需要传入函数就行了(不用写括号参数,写了就是执行)
            this.debounceHandleValuesChange = debounce(this.handleValuesChange, 800)
        },
        methods: {
            // 原来多次重复使用的方法
            handleValuesChange(values,index,name) {
                // ...逻辑
                // 里面有一些有this的操作...
                console.log(this.msg)
            },
            
            // 把原来的方法替换成debounce返回的防抖方法即可
            xxx() {
                this.form = this.$form.createForm(
                this,
                {
                  onValuesChange: (_, values) => {
                    this.$nextTick(() => {
                      // this.handleValuesChange(          // 原来的方法
                      this.debounceHandleValuesChange(     // 防抖方法
                        values,
                        index,
                        name
                      )
                    })
                  }
                }
              )
            }
        }
    }
    
  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/chifung/p/12761446.html
Copyright © 2011-2022 走看看