Render函数是什么 简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM
render:(r=>{ return createElement('h1', 'Hello World!') })render方法会传入一个createElement函数,它是一个用于创建DOM元素或者用于实例化其他组件的构造方法
export default { render: function(createElement) { const menu_items = ["首页","搜索","分类","系统"] return createElement('ul', menu_items.map(item => { return createElement('li', { class: { 'uk-nav': true }, domProps: { innerHTML: item } }) }) ) },}相当于模板语法
<ul> <li v-for="item in menu_items" :class="{'uk-nav': true}"> {{ item }} </li></ul>createElement的定义
createElement(tag,data,children) 返回值vNode(虚拟节点) 参数说明: tag 类型:String/Object/Function 说明:一个HTML标签,组件类型,或一个函数 Data 类型:Object 说明:一个对应属性的数据对象,用于向创建的节点对象设置属性值 Children 类型:String/Array 说明:子节点render函数的第一个参数 第一个参数必选. 可选类型 string:html标签 object:一个含有数据选项的对象 function:返回一个含有数据选项的对象
Vue.component('child', { props: ['level'], render: function (createElement) { //string:html标签 return createElement('h1') //object:一个含有数据选项的对象 return createElement({ template: '<div>谈笑风生</div>' }) //function:返回一个含有数据选项的对象 var domFun = function () { return { template: `<div>谈笑风生</div>` }} return createElement(domFun()) } })render函数的第二个参数 第二个参数可选 第二个参数是数据对象。只能是object class/style/attrs/domProps/Prop
Vue.component('child', { props: ['level'], render: function (createElement) { return createElement('div', { class: { foo: true, baz: false }, style: { height: '34px', background: 'orange', fontSize: '16px' }, //正常的html特性(除了class和style) attrs: { id: 'foo', title: 'baz' }, //用来写原生的DOM属性 domProps: { innerHTML: '<span style="color:blue;font-size:24px">江心比心</span>' } }) } })render函数的第三个参数 代表子节点 第三个参数可选 String|Array
Vue.component('child', { props: ['level'], render: function (createElement) { return createElement('div', [ createElement('h1', '我是大标题'), createElement('h2', '我是二标题'), createElement('h3', '我是三标题')]) } })