秒懂Render的三个参数

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', '我是三标题')]) } })
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值