vue2中render函数学习

 第一部分: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)

未完待续。。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个好好的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值