美文网首页
render函数

render函数

作者: lyp82nkl | 来源:发表于2019-07-14 21:51 被阅读0次

render 函数的作用

  • 简单的说,在vue中使用模板HTML语法组建页面,使用render函数可以用js语言来构建DOM

  • 因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译的过程。

  • 当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要的工具。官网上给他起了个名字叫createElement。还有约定的简写叫h,

栗子:根据 data 中 level 的值,用不同标题标签显示文本:

<div id="app">
    <child-component :level="level">
      哆啦A梦
    </child-component>
</div>

Vue.component('child-component', {
  props: ['level'],
  template: `<div>
    <h1 v-if="level === 1"><slot></slot></h1>
    <h2 v-if="level === 2"><slot></slot></h2>
    <h3 v-if="level === 3"><slot></slot></h3>
  </div>`
})

var app = new Vue({
  el: '#app',
  data: {
    level: 1
  }
})

将 level 的值改成 1,会渲染 template 中的 h1 标签。

实际开发中可能会把 template 写得巨长;使用 render 函数来实现上面的 demo:

<div id="app">
    <child :level="level">
        哆啦A梦
    </child>
</div>


<script>
    // 使用render函数进行定义组件
    Vue.component('child', {
        render: function (createElement) {
            return createElement('h' + this.level,
                this.$slots.default);
        },
        props: ['level']
    })

    var app = new Vue({
        el: '#app',
        data: {
            level: 1
        }
    })
</script>

渲染效果与上面使用 template 一致。
使用 render函数 比 template 要简洁很多。

render函数用法

  • render函数可以接收 createElement 作为参数,并且必须是 createElement;
  • createElement 也是一个函数;
  • createElement 可以传三个参数(上面只传了两个);
    第一个参数必需,可以是 String / Object / Function 类型;
    第二个参数可选,只能是 Object 类型;
    第三个参数可选,可以是 String / Array 类型。

createElement 的第一个参数

  • 第一个参数必选
  • 可以是string - html标签
  • 可以是object -- 一个含有数据选项的对象
  • 可以是function ---方法返回含有数据选项的对象
<body>
    <div id="app">
        <child></child>
    </div>


<script>
    Vue.component('child', {
        render: function (createElement) {
            // 1. 传 String
            return createElement('h1') // 创建一个 HTML 标签

            // 2. 传 Object
            return createElement({ // 创建一个含有数据选项的对象
                template: '<h1>你好</h1>'
            })

            // 3. 传 Function(函数最终要 return 对象,所以本质上还是传的对象)
            return createElement(function () {
                return {
                    template: '<h1>你好</h1>'
                }
            }()) // 函数要调用一下,否则不起效果
        }
    })

var app = new Vue({
    el: '#app',
    data: {

    }
})
</script>

createElement 的第二个参数

  • 第二个参数可选,只能是 Object 类型,Object 中可以设置元素的一些属性。
    <div id="app">
        <child></child>
    </div>

    <script>
        Vue.component('child', {
            //第二个参数可选,第二个参数是数据对象
            render: function (createElement) {
                return createElement({
                    template: '<div>花间提壶方大厨</div>'
                }, {
                    class: {
                        foo: true,
                        baz: false
                    },
                    style: {
                        color: 'red',
                        fontSize: '16px'
                    },
                    //正常的 html 特性
                    attrs: {
                        id: "foo",
                        src: 'http://www.baidu.com'
                    }
                })
            }
        })
        var app = new Vue({
            el: '#app',

        })
    </script>

createElement 的第三个参数

  • 第三个参数可选, 可以是 String | Array ---代表子节点
    <div id="app">
        <child></child>
    </div>

    <script>
        Vue.component('child', {
            //第三个参数可选, 可以是 String | Array ---代表子节点
            render: function (createElement) {
                return createElement('div', [
                    createElement('h2', '我是h2标题'),
                    createElement('h5', '我是h5标题')
                ])
            }
        })
        var app = new Vue({
            el: '#app',
        })
    </script>

相关文章

  • vue的render函数

    render函数的作用 我们自己使用render函数 render函数---通过initrender加入vm对象原...

  • VUE/MUI 项目小记

    render虚拟DOM构造函数 MUI上拉加载 render函数

  • vue中的render函数式组件

    问题:1、render函数是什么2、render函数怎么用 1. render函数是什么 简单的说,在vue中我们...

  • vue渲染流程

    把模板转化成render函数 调用render函数产生虚拟节点,将虚拟节点插入到真实节点上 生成render函数方...

  • Vue render函数认识和使用

    1、认识render函数参数使用 (1)、 render函数的第一个参数 在render函数的方法中,参数必须是c...

  • RN 错误大全

    这个错误的原因是render函数出错,具体就是在render函数里面写了注释,所以千万不要在render函数里写注...

  • React学习笔记2

    1.render函数对于props和state必须是纯函数 render函数不能改变props和state的属性,...

  • 4-组件与 prop、state

    语法: 引入Component 新建一个类,继承Component 实现render函数 在render函数内返回...

  • vue编译模板

    一,with语法 二,编译模板 1,模板编译为render函数,执行render函数返回vnode(虚拟节点)...

  • React V17.0源码 学习笔记(一)

    ReactDOM.render 函数调用说明 ReactDOM.render(element,container,...

网友评论

      本文标题:render函数

      本文链接:https://www.haomeiwen.com/subject/owwikctx.html