最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue的render方法学习

    正文概述 掘金(黄金林)   2020-11-29   768

    1.概述

    vue的render方法,即渲染函数,它比模板更接近于编译器,也意味在执行效率上会比模板好,如果我们要写更好的组件,或者阅读别人的代码,我们就需要学习render方法

    2.语法

    render方法和createElement接受的参数说明如下

    Vue.component('component-name', {
    	render(createElement){
            // @returns {VNode} 返回虚拟dom节点对象
            return createElement(
            	// {String | Object | Function}
                // 一个 HTML 标签名、组件选项对象,或者
      	        // resolve 了上述任何一种的一个 async 函数。必填项。
                'div',
                // {Object}
      			// 一个与模板中 attribute 对应的数据对象
                {},
                // {String | Array}
                // 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,
      			// 也可以使用字符串来生成“文本虚拟节点”。可选。
                []
            )
        }
    }
    

    3.例子

    3.1 最简单的

    Vue.component('el-title', {
    	data(){return {title: '这是一个标题'}},
        render(createElement) {
            /*
            <el-title/>等效于
            <h1>这是一个标题</h1>
            */
            return createElement('h1', this.title)
        }
    }
    

    3.2 指定属性

    Vue.component('el-title', {
    	data(){return {title: '这是一个标题'}},
        render(createElement) {
            /*
            <el-title/>等效于
            <h1 class="title">这是一个标题</h1>
            */
            return createElement('h1',{class: {title: true}}, this.title)
        }
    }
    

    3.3 使用插槽

    Vue.component('el-title', {
        render(createElement) {
            /*
            <el-title><h1 class="title">这是一个标题</h1></el-title>等效于
            <div class="title"><h1 class="title">这是一个标题</h1></div>
            */
            return createElement('div',{class: {title: true}}, this.$slots.default)
        }
    }
    

    3.4 使用作用域插槽

    Vue.component('el-title', {
    	data(){return {title: '这是一个标题'}},
        render(createElement) {
            /*
            <el-title><template slot-scope="scope"><h1>{{scope.text}}</h1></template></el-title>等效于
            <div class="title"><h1>这是一个标题</h1></div>
            */
            return createElement('div',{class: {title: true}}, 			
            	this.$scopedSlots.default({
                    text: this.title
                }))
        }
    }
    

    3.5 多个子元素

    Vue.component('el-title', {
        render(createElement) {
            /*
            <el-title></el-title>等效于
            <div class="title"><h1>标题1</h1><h1>标题2</h1></div>
            */
            return createElement('div',{class: {title: true}}, [
                    createElement('h1', '标题1'),
                    createElement('h1', '标题2')
                ])
        }
    }
    

    3.6 循环生成子元素

    Vue.component('el-table', {
    	data(){return {
            columns = [
                    {label: '标题1'},
                    {label: '标题2'}
            ]}
    	},
        render(createElement) {
            /*
            <el-table></el-table>等效于
            <table class="el-table__header">
            	<thead>
            		<th><div>标题1</div></th>
            		<th><div>标题2</div></th>
            	</thead>
            </table>
            */ 
            return createElement('table',{class: {'el-table__header': true}}, [
                createElement('thead', this.columns.map(column=>{
                    return createElement('th',[createElement('div',column.label)])
                }))
            ])
        }
    }
    

    起源地下载网 » vue的render方法学习

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元