render函数

Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力。这时你可以用渲染函数,它比模板更接近编译器。

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

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

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

render是为补救template缺点而诞生的,template是有标签,根据标签插值内容,render厉害一点,可以渲染标签,并添加到虚拟DOM中。

注意下:

1,template是模板语法,而render是js语法,render其实是用来生成模板;

2,render用多了,发现挺麻烦,有一个插件jsx可以让render代码写得更自在

参考理解:https://www.jianshu.com/p/b7dd8db354bf

简单使用:

<!doctype html>

<html lang="en">

<head>

    <meta charset="UTF-8" />

    <title>Document</title>

</head>

<body>

    <div id="app">

        <child :level=1>hello Vue</child>

        <child :level=6>

            <span slot="footer">span</span>

            <p slot="header">header slot<span>span</span></p>

        </child>

    </div>

    <script src="node_modules/vue/dist/vue.js"></script>//使用时改为自己的vue路径

    <script>

    Vue.component('child', {

        render:function(createElement) {

            return createElement('h'+this.level, {

                'class': {

                    foo:true,

                    bar:true

                },

                style: {

                    color:"red"

                },

                attrs: {

                    id:'foo',

                    'data-id':'bar'

                },

                domProps: {

                    //

                },

                on: {

                    click:this.clickit

                },

            },

            [this.$slots.default]

           )

        },

        template:'<div v-if="level===1"><slot></slot></div>',

        props: {

            level: {

                type: Number,

                required:true

            }

        },

        methods: {

            clickit:function() {

                console.log('click')

            }

        }

    })

    new Vue({

        el:"#app"

    })

    </script>

</body>

</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • render 函数的作用 简单的说,在vue中使用模板HTML语法组建页面,使用render函数可以用js语言来构...
    lyp82nkl阅读 553评论 1 1
  • 一、render函数是什么 简单的说,在vue中我们使用模板HTML语法来组建页面的,使用render函数我们可以...
    仰望_IT阅读 383评论 0 0
  • 前几天想学学Vue中怎么编写可复用的组件,提到要对Vue的render函数有所了解。可仔细一想,对于Vue的ren...
    kangaroo_v阅读 116,612评论 13 171
  • 更灵活的组件:Render 函数与 Functional Render Vue.js 2.x 与 Vue.js 1...
    中午吃啥_f330阅读 2,200评论 0 3
  • 在很多文章类型的网站中,都区分一级标题、二级标题、三级标题等,为方便分享url,它们都被做成了锚点,点击一下,会将...
    wenmingxing阅读 837评论 0 2

友情链接更多精彩内容