第一部分:render函数的语法学习
都知道Vue
项目入口文件main.js
里面有个render
函数长下面这样,将项目的App
根组件,挂载到根实例上通过render
渲染
new Vue({
render: h => h(App)
}).$mount('#app')
render函数返回值是一个VNode -> "virtual node"虚拟节点
render函数的参数是一个createElement函数
第一个 标签名称
第二个 属性值
第三个 标签子级元素
createElement返回值也是一个VNode节点
createElement函数的参数有三个
例如以下vue2的写法
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
</div>
<script>
/*
render函数的用途
创建html模板
知识点:
1.render 函数的参数是createElement 函数
createElement返回值是一个虚拟dom。即VNode
也就是我们要渲染的节点
2.createElement有三个参数
第一个参数:必需,{String|Object|Function}
是要渲染的html标签
第二个参数:可选:{Object}
html标签的各种属性
第三个参数:可选,{String|Array}
子虚拟节点(VNodes),
当前html标签的子元素
3.渲染过程
【1】独立构建
包括模板编译器。HTML字符串===>render函数===>Vnode===>真实dom节点
【2】运行时构建
不包含模板编译器,render函数===>VNode===>真实DOM节点
render函数的返回值是VNode
*/
new Vue({
data() {
return {
isRed: true
}
},
// render:h=>h(App),
render(createElement) {
return createElement('div', {
// 第二个参数:可选:{Object}:html标签的各种属性
'class': {
'is-red': this.isRed
},
// 设置style
style:{color:"#f00",fontSize:"22px"},
// 设置html内容domProps
// domProps:{innerHTML:'我是div的内容,我今天很开心'},
// 设置html的属性
attrs:{id:"xxid"}
}, [
// domProps如果在父盒子设置,子元素内容不会显示
createElement('h1','我是虚拟子节点')
]
)
}
}).$mount('#app')
</script>
</body>
</html>
第二部分:全局注册组件写法
第一步:创建js文件默认导出
export default {
render (createElement) {
return createElement('div', {
// 第二个参数:可选:{Object}:html标签的各种属性
class: {
'is-red': this.isRed
},
// 设置style
style: { color: '#f00', fontSize: '22px' },
// 设置html内容domProps
domProps: { innerHTML: '我是div的内容,我今天很开心' },
// 设置html的属性
attrs: { id: 'xxid' }
}, [
// domProps如果在父盒子设置,子元素内容不会显示
createElement('h1', '我是虚拟子节点')
]
)
}
}
第二 步:在main.js中全局注册
import render from './views/render/render.js'
Vue.component('textName', render)
未完待续。。。