• vue高阶组件研究


    1.什么是HOC?

    所谓高阶组件其实就是高阶函数,React 和 Vue 都证明了一件事儿:一个函数就是一个组件。所以组件是函数这个命题成立了,那高阶组件很自然的就是高阶函数,即一个返回函数的函数
    // 防抖函数
    function debounce (func, delay, context, event) {
      clearTimeout(func.timer)
      func.timer = setTimeout(function () {
        func.call(context, event)
      }, delay)
    }
    // 导出新组件
    export default {
      props: {},
      name: 'ButtonHoc',
      data () {
        return {}
      },
      mounted () {
        console.log('HOC succeed')
      },
      methods: {
        handleClickLink (event) {
          let that = this
          console.log('debounce')
          // that.$listeners.click为绑定在新组件上的click函数
          debounce(that.$listeners.click, 300, that, event)
        }
      },
      render (h) {
        const slots = Object.keys(this.$slots)
          .reduce((arr, key) => arr.concat(this.$slots[key]), [])
          .map(vnode => {
            vnode.context = this._self
            return vnode
          })
        return h('Button', {
          on: {
            click: this.handleClickLink //新组件绑定click事件
          },
          props: this.$props,
          // 透传 scopedSlots
          scopedSlots: this.$scopedSlots,
          attrs: this.$attrs
        }, slots)
      }
    }
    

      

    总结:HOC的特点在于它的包裹性,上列源码我们做了这些操作,来实现包裹iview的Button组件,劫持click事件,(1)创建debounce防抖函数,导出新组件,render渲染出iview button,button绑定debounce后的click方法。

  • 相关阅读:
    [Usaco2005 open]Expedition
    舞会
    双栈维护之--Hdu4699 editor
    利用两个堆来维护第K大之Poj3784 Running Median
    Zju1061Web Navigation 网络导航
    Qsort求静态的第K大
    BZOJ2726【SDOI2012】任务安排(斜率优化Dp+二分查找)
    P2365 任务安排 斜率优化入门
    任务处理--斜率优化Dp入门
    结构体排序教学
  • 原文地址:https://www.cnblogs.com/hongyungo/p/12380883.html
Copyright © 2020-2023  润新知