vue渲染方式:render和template的区别

template----html的方式做渲染

render----js的方式做渲染

render(提供)是一种编译方式

render里有一个函数h,这个h的作用是将单文件组件进行虚拟DOM的创建,然后再通过render进行解析。

h就是createElement()方法:createElement(标签名称,属性配置,children)

template也是一种编译方式,但是template最终还是要通过render的方式再次进行编译。

区别:

1、render渲染方式可以让我们将js发挥到极致,因为render的方式其实是通过createElement()进行虚拟DOM的创建。逻辑性比较强,适合复杂的组件封装。

2、template是类似于html一样的模板来进行组件的封装。

3、render的性能比template的性能好很多

4、render函数优先级大于template

案例一:template和render的方式渲染标题标签:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h-title level="1">标题</h-title>
        <h-title level="2">标题</h-title>
        <h-title level="3">标题</h-title>
    </div>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script>
        Vue.component("h-title",{
            /*   template渲染   */
            // template:`
            //     <div>
            //         <h1 v-if="level==1"><slot></slot></h1>
            //         <h2 v-else-if="level==2"><slot></slot></h2>
            //         <h3 v-else-if="level==3"><slot></slot></h3>
            //     </div>
            // `,

            /*   render渲染   */
            render:function(h){
                // createElement(标签名称,属性配置,children)
                return h("h"+this.level,
                    {
                        attrs:{
                            "data-id":10
                        }
                    },
                    // 相当于<slot></slot>标签接收
                    this.$slots.default
                )
            },
            props:{
                level:{
                    type:String
                }
            }
        });
        let vm=new Vue({
            el:"#app"
        });
    </script>
</body>
</html>

案例二:render方式模拟button:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{margin: 0;padding: 0;}
        .btn{
            width: 80px;
            line-height: 40px;
            text-align: center;
            color:#fff;
            border-radius: 5px;
            background-color: #ccc;
        }
        .success{background-color: green;}
        .error{background-color: red;}
        .info{background-color: pink;}
    </style>
</head>
<body>
    <div id="app">
        <wql-button type="success">成功</wql-button>
        <wql-button type="info">提示</wql-button>
        <wql-button type="error">报错</wql-button>
        <wql-button>默认</wql-button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        Vue.component("wql-button",{
            render:function(h){
                return h("div",{
                    class:{
                        btn:true,
                        success:this.type=="success",
                        error:this.type=="error",
                        info:this.type=="info"
                    }
                },this.$slots.default);
            },
            props:{
                type:{
                    type:String
                }
            }
        });
        let vm=new Vue({
            el:"#app"
        });
    </script>
</body>
</html>

原文地址:https://www.cnblogs.com/wuqilang/p/12345512.html

时间: 2024-10-10 10:36:47

vue渲染方式:render和template的区别的相关文章

【Vue】彻底理解Vue中render函数与template的区别

一.render函数与template对比 VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数. 以下我们来做一个需求跟根据level等级来编写对应等级的标题 template解析 <body>   <divid="app">       <h-titlelevel=1>           <p>li</p>       </

vue入门:(底层渲染实现render函数、实例生命周期)

vue实例渲染的底层实现 vue实例生命周期 一.vue实例渲染的底层实现 1.1实例挂载 在vue中实例挂载有两种方法:第一种在实例化vue时以el属性实现,第二种是通过vue.$mount()方法实现挂载.不管是哪种挂载都不影响vue实例化组件的执行流程和模式,只是通过vue.$mount()方法实现挂载可以更灵活的实现组件复用和挂载. 1 var vm = new Vue({ 2 el:'挂载元素id',//实例化el属性实现挂载 3 ... 4 }) 5 var vm1 = new Vu

理解Vue中的Render渲染函数

VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数.比如如下我想要实现如下html: <div id="container"> <h1> <a href="#"> Hello world! </a> </h1> </div> 我们会如下使用: <!DOCTYPE html> <html

前端模板与渲染方式

1 页面级的渲染 再刚有web的时候,前端与后端的交互,非常直白,浏览器端发出URL,后端返回一张拼好了的HTML串.浏览器对其进行渲染.html中可能会混有一些php(或者php中混有一些html).在服务端将数据与模板进行拼装,生成要返回浏览器端的html串. 这与我们现在做一个普通网页没什么区别.只不过现在,我们更常使用模板技术来解决前后端耦合的问题. 前端使用模板引擎,在html中写一些标签,与数据与逻辑基本无关.后端在渲染的时候,解析这些标签,生成HTML串,如smarty.其实前端与

Vue:渲染、指令、事件、组件、Props、Slots

如果要我用一句话描述使用 Vue 的经历,我可能会说“它如此合乎常理”或者“它提供给我需要的工具,而且没有妨碍我的工作”.每当学习 Vue 的时候,我都很高兴,因为很有意义,而且很优雅. 以上是我对 Vue 的介绍.在我第一次学习 Vue 的时候,我就想要这样的文章 我喜欢 Vue 的一点是它吸取了其它框架的优秀之处,并有条不紊的将它们组合在一起. 具有响应式组件化的虚拟 DOM 只提供视图层, props 和 类 Redux 状态管理与 React 类似. 条件渲染和服务与 Angular 类

Vue:渲染、指令、事件、组件、Props

如果要我用一句话描述使用 Vue 的经历,我可能会说"它如此合乎常理"或者"它提供给我需要的工具,而且没有妨碍我的工作".每当学习 Vue 的时候,我都很高兴,因为很有意义,而且很优雅. 以上是我对 Vue 的介绍.在我第一次学习 Vue 的时候,我就想要这样的文章 我喜欢 Vue 的一点是它吸取了其它框架的优秀之处,并有条不紊的将它们组合在一起. 具有响应式组件化的虚拟 DOM 只提供视图层, props 和 类 Redux 状态管理与 React 类似. 条件渲

django中url路由配置及渲染方式

今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 创建视图并访问 项目中自带的Python文件中,并没有带有视图,因此我们自己创建一个,通常,我们把视图命名views.py. 然后在views.py中,导入头文件  from django.http import HttpResponse 然后我们在views.py中,写一些Python函数,用来

Vue与React两个框架的区别对比

简单介绍 React--Facebook创建的JavaScript UI框架.它支撑着包括Instagram在内的大多数Facebook网站.React与当时流行的jQuery,Backbone.js和Angular 1等框架不同,它的诞生改变了JavaScript的世界.其中最大的变化是React推广了Virtual DOM(虚拟DOM)并创造了新的语法--JSX,JSX允许开发者在JavaScript中书写HTML(译者注:即HTML in JavaScript). Vue致力解决的问题与R

[Vue源码]一起来学Vue模板编译原理(一)-Template生成AST

本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vue模板编译原理(一)-Template生成AST 一起来学Vue模板编译原理(二)-AST生成Render字符串 一起来学Vue虚拟DOM解析-Virtual Dom实现和Dom-diff算法 这些文章统一放在我的git仓库:https://github.com/yzsunlei/javascrip