探索Vue高阶组件的使用

2020-06-16 06:24:45易采站长站整理
进行对比的讲解。首先是一个基本的
Vue
组件,我们常称其为被包装组件(
WrappedComponent
),假设我们的组件叫做
BaseComponent

base-component.vue


<template>
<div>
<span @click="handleClick">props: {{test}}</span>
</div>
</template>

<script>
export default {
name: 'BaseComponent',
props: {
test: Number
},
methods: {
handleClick () {
this.$emit('customize-click')
}
}
}
</script>

我们观察一个

Vue
组件主要观察三点:
props
event
以及
slots
。对于
BaseComponent
组件而言,它接收一个数字类型的
props
test
,并发射一个自定义事件,事件的名称是:
customize-click
,没有
slots
。我们会这样使用该组件:


<base-component @customize-click="handleCustClick" :test="100" />

现在我们需要

base-component
组件每次挂载完成的时候都打印一句话:
I have already mounted
,同时这也许是很多组件的需求,所以按照
mixins
的方式,我们可以这样做,首先定义个
mixins


export default {
name: 'BaseComponent',
props: {
test: Number
},
mixins: [ consoleMixin ] methods: {
handleClick () {
this.$emit('customize-click')
}
}
}

然后在

BaseComponent
组件中将
consoleMixin
混入:


export default {
name: 'BaseComponent',
props: {
test: Number
},
mixins: [ consoleMixin ] methods: {
handleClick () {
this.$emit('customize-click')
}
}
}

这样使用

BaseComponent
组件的时候,每次挂载完成之后都会打印一句
I have already mounted
,不过现在我们要使用高阶组件的方式实现同样的功能,回忆高阶组件的定义: