vue之 render函数 入门篇
render: function (createElement) {
return createElement(
tag,
data,
children
)
}
简单渲染一个 h1 标签
父组件
<template>
<div>
<Test title="我是title1"></Test>
</div>
</template>
<script>
import Test from './com/Test.vue'
export default {
name: 'Home',
components: {
Test
},
}
</script>
子组件
<script>
export default {
name: 'Test',
props: {
title: String
},
components: {},
render: function(createElement) {
return createElement(
'h1',
{
style: {
color: 'red',
background: '#001'
}
},
this.title
)
}
}
</script>
<style lang="scss" scoped></style>
- 效果
简单渲染一个 ul 与 li
父组件
<template>
<div>
Home
<Test></Test>
</div>
</template>
<script>
import Test from './com/Test.vue'
export default {
name: 'Home',
components: {
Test
},
data() {
return {}
},
methods: {}
}
</script>
<style lang="scss" scoped></style>
子
<script>
export default {
name: 'Test',
props: {
title: String
},
components: {},
data() {
return {
parent: 'ul',
son: 'li',
list: ['li-1', 'li-2', 'li-3']
}
},
render: function(createElement) {
return createElement(
this.parent,
this.list.map(_ => {
return createElement(this.son, _)
})
)
}
}
</script>
默认插槽 与 具名插槽
父组件
<!--
描述:
作者:xzl
时间:05月16日132536
-->
<template>
<div>
Home
<Test
><div name="header">我是header</div>
我是默认插槽菜鸡
<div>我是默认插槽2级菜鸡</div>
</Test>
</div>
</template>
<script>
import Test from './com/Test.vue'
export default {
name: 'Home',
components: {
Test
},
data() {
return {}
},
methods: {}
}
</script>
<style lang="scss" scoped></style>
子
<!--
描述:
作者:xzl
时间:05月25日133237
-->
<script>
export default {
name: 'Test',
props: {
title: String
},
components: {},
data() {
return {}
},
render: function(createElement) {
let _this = this['$options'].parent
let _header = _this.$slots.header
return createElement(
'div',
{
style: {
color: '#333',
border: '1px solid #ccc'
}
},
[
createElement('div', _header),
this.$slots.default
]
)
}
}
</script>
<style lang="scss" scoped></style>
- 效果