文章目录
为什么需要渲染函数
Vue推荐多数情况使用模板创建HTML,但是在一些情况下使用渲染函数会更加方便,例如,例如要生成带有锚点的标题
<h1>
<a name="hello-world" href="#hello-world">
Hello world!
</a>
</h1>
将这段代码封装为组件,传入level
作为参数,level
取值1 - 6
,对应H1 - H6
,如果使用模板需要借助slot
并且配合大量的if...else
:
<template>
<h1 v-if="level === 1">
<slot></slot>
</h1>
<h2 v-else-if="level === 2">
<slot></slot>
</h2>
<h3 v-else-if="level === 3">
<slot></slot>
</h3>
<h4 v-else-if="level === 4">
<slot></slot>
</h4>
<h5 v-else-if="level === 5">
<slot></slot>
</h5>
<h6 v-else-if="level === 6">
<slot></slot>
</h6>
</template>
模板很啰嗦,可以考虑使用渲染函数来进行优化
<script lang="ts">
import {defineComponent, h} from 'vue';
export default defineComponent({
name: 'anchored-heading',
props: {
level: {
type: Number,
required: true
}
},
render() {
const tag = `h${this.level}`;
return h(tag, {}, this.$slots.defau