Vue HOC

什么是HOC?

HOC(Higher-order component)是一种React 的进阶使用方法,只要还是为了便于组件的复用。强调一点,HOC本身并不是 React API, 它就是一个方法,一个接收一个组件作为参数,返回一个增强的组件的方法。

什么时候使用HOC?

高阶组件的目的是解决一些交叉问题(Cross-Cutting Concerns)。而最早时候 React 官方给出的解决方案是使用 mixin 。但官方也意识到了使用mixins技术来解决此类问题所带来的困扰远高于其本身的价值。更多资料可以查阅官方说明。

在React开发过程中,在很多情况下,组件需要被“增强”(enhanced),比如给组件添加或修改一些特定的属性,针对多个组件的代码复用。

概括的讲,HOC能够实现:

  1. 代码复用,代码模块化

  2. 渲染劫持, 操作state

  3. Props 增删改

HOC的实现方式

在这节中我们将学习两种主流的在 React 中实现高阶组件的方法:属性代理(Props Proxy)和 反向继承(Inheritance Inversion)。

VUE如何实现

import microComponent from '@/views/common/micro-component.vue'

type createMicroProps = {
  title: string
  name: string
  url: string
}

const withMicroComponent = function({ title, name, url }: createMicroProps) {
  const mixin = {
    name,
    data() {
      return {
        title,
        name,
        url
      }
    }
  }
  return Object.create(microComponent, {
    mixins: {
      get() {
        const mixins = super.mixins || []
        return mixins.concat(mixin)
      }
    }
  })
}
import Vue from 'Vue'

export default const HOC = (component, text) => {
    return Vue.component('HOC', {
        render(createElement) {
            return createElement(component, {
                on: { ...this.$listeners },
                props: {
                    text: this.text
                }
            })
        },
        data() {
            return {
                text: text,
                hocText: 'HOC'
            }
        },
        mounted() {
            // do something ...
            console.log(this.text)
            console.log(this.hocText)
        }
    })
}

react HOC: https://www.jianshu.com/p/4143a6296994

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。