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
                      )
                    })
                  }
                }
              )
            }
        }
    }
    
  • 相关阅读:
    AutoIT练习
    AutoIT键盘鼠标模拟组件
    javascript class 定义
    JIRA
    vs 命令窗口 常用命令
    jquery 获取参数 plugin
    THE VALUE OF TIME
    哈佛图书馆的二十条训言
    优秀javascript js组件集锦
    UVA 11205 The broken pedometer
  • 原文地址:https://www.cnblogs.com/chifung/p/12761446.html
Copyright © 2011-2022 走看看