一。render 函数的作用:

写一些vue.js的template太繁琐,利用render,可以使用js来生成模板,更加灵活和简便。

二。使用render前提:

官网也说了。在深入渲染函数之前推荐阅读实例属性 API 因为写很多render的函数里面需要调用其实例属性的API.

三。一个简易demo

实现效果:

目标:点击1的时候使用,下方内容使用h1标题,点击hi 的时候,使用hi的标题.

其父组件很好写:

<template>
<div id="app">
<input type="radio" value="1" v-model.number="selectlevel" name="bigsize"/>1
<input type="radio" value="2" v-model.number="selectlevel" name="bigsize"/>2
<input type="radio" value="3" v-model.number="selectlevel" name="bigsize"/>3
<input type="radio" value="4" v-model.number="selectlevel" name="bigsize"/>4
<input type="radio" value="5" v-model.number="selectlevel" name="bigsize"/>5
<input type="radio" value="6" v-model.number="selectlevel" name="bigsize"/>6
<br>
内容大小:
{{ selectlevel }}
<fuck :level="selectlevel">
balabala...balabala...balabala...balabala...balabala...
balabala...balabala...balabala...balabala...balabala...
balabala...balabala...balabala...balabala...balabala...
balabala...balabala...balabala...balabala...balabala...
balabala...balabala...balabala...balabala...balabala...
balabala...balabala...balabala...balabala...balabala...
</fuck> </div>
</template> <script>
import fuck from './components/fuck'
export default {
data (){
return {
selectlevel : 1
}
},
components:{
fuck
}
};
</script>

子组件不使用render的时候,是这样: 很复杂,多个slot。

<template>
<div id="fuck"> <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>
<h4 v-else-if="level === 4">
<slot></slot>
</h4>
<h5 v-else-if="level === 5">
<slot></slot>
</h5>
<h6 v-else-if="level === 6">
<slot></slot>
</h6>
</div>
</template> <script>
export default {
name : 'fuck',
props:{
level: {
type: Number,
required:true
}
},
}
</script>

使用render后,是这样:只需要一个函数就行。可以看到这个文件里面没有template,使用render生成的template。

<script>
export default {
name : 'fuck',
render: function(createElement) {
return createElement(
'h' + this.level,
this.$slots.default
);
},
props:{
level: {
type: Number,
required:true
}
},
}
</script>

几点说明

  1. render方法会传入一个createElement函数

这个函数呢。其返回一个"虚拟DOM",其参数有三个:

tag    类型:String/Object/Function  说明:一个HTML标签,组件类型,或一个函数

Data    类型:Object 说明:一个对应属性的数据对象,用于向创建的节点对象设置属性值

Children  类型:String/Array       说明:子节点

  1. createElement这个方法在vue2的习惯性使用中经常用h来命名
  2. 经常见到的render: h => h(App) 具体是什么含义?

    这是以下代码的缩写。
render: function (createElement) {
return createElement(App);
}

作用呢?

可以参看第一种写法:

import App from './App'
new Vue({
el: '#root',
template: '<App></App>',
components: {
App
}
})

第二种写法:

import App from './App'
new Vue({
el: '#root',
render: h => h(App)
})

上面两种的效果是一样的,可以看出 h(App)函数 的作用是:使用App作为这个Vue实例的template(同时一并了注册App组件)###

再补充一点的是:在业务中,生产效率是第一位,所以绝大部分业务代码都应当用 template 来完成。 你不用在意性能问题 , 如果使用了 webpack 做编译 , template 都会被预编译为 render 函数。####

vue render函数解析的更多相关文章

  1. vue render函数 函数组件化

    之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法,它只是一个接受参数的函数 在这个例子中,我们标记组件为functional,这意味它是无状态(没有data), ...

  2. vue render函数

    基础 vue推荐在绝大多数情况下使用template来创建你的html.然而在一些场景中,你真的需要javascript的完全编程能力.这就是render函数.它比template更接近编译器 < ...

  3. [转]iview render函数常用总结(vue render函数)

    原文地址:https://blog.csdn.net/weixin_43206949/article/details/89385550 iview 的render函数就是vue的render函数ivi ...

  4. vue render函数使用jsx语法 可以使用v-model语法 vuex实现数据持久化

    render函数使用jsx语法: 安装插件  transform-vue-jsx 可以使用v-model语法安装插件 jsx-v-model .babelrc文件配置: vuex实现数据持久化 安装插 ...

  5. Vue render函数 函数时组件 jsx

    常规组件使用 定义组件 components/list/list.vue <template> <ul> <li v-for="(item, index) in ...

  6. 会使用基本的Render函数后,就会想,这怎么用 v-for/v-if/v-model;我写个vue Render函数进阶

    https://blog.csdn.net/wngzhem/article/details/54291024

  7. iview中table的render()函数

    Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接 ...

  8. Vue源码解析:AST语法树转render函数

    开始 今天要说的代码全在codegen文件夹中,在说实现原理前,还是先看个简单的例子! <div class="container"> <span>{{ms ...

  9. Vue.js之render函数基础

    刚才翻了一下博客,才发现,距离自己写的第一篇Vue的博客vue.js之绑定class和style(2016-10-30)已经过去一年零两天.这一年里,自己从船厂的普通技术员,成为了一个微型不靠谱创业公 ...

随机推荐

  1. Python-TCP客户端程序开发

    TCP客户端,需要与服务端建立连接,连接建立成功后才可以进行数据的传输. # 1.导入模块 import socket if __name__ == '__main__': # 2.创建套接字对象 t ...

  2. redis(6)--redis集群之分片机制(redis-cluster)

    Redis-Cluster 即使是使用哨兵,此时的Redis集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成了木桶效应.而因为Redis是基于内存 ...

  3. ELK-logstash基本用法

    一:logstash介绍 Logstash在elk系统中为数据存储,报表查询和日志解析创建了一个功能强大的管道链.Logstash提供了多种多样的 input,filters,codecs和outpu ...

  4. Weed3 for java 新的微型ORM框架

    Weed3,微型ORM框架(支持:java sql,xml sql,annotation sql:存储过程:事务:缓存:监听:等...) 05年时开发了第一代: 08年时开发了第二代,那时候进入互联网 ...

  5. 3个Spring Boot项目调优的方式

    前言 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行.   一.修改配置文件 关于修改配置文件applicati ...

  6. python爬虫--数据解析

    数据解析 什么是数据解析及作用 概念:就是将一组数据中的局部数据进行提取 作用:来实现聚焦爬虫 数据解析的通用原理 标签定位 取文本或者属性 正则解析 正则回顾 单字符: . : 除换行以外所有字符 ...

  7. AWS re:Invent 2019参会有感

    感谢AWS方面的邀请,以及公司给予的机会,近期有幸赴美参与了享有盛名的AWS re:Invent大会.会议期间自己还算勤勉,参加了尽可能多的session.现笔者也已回到国内,交个作业,写一篇短文作为 ...

  8. python基础知识第五篇(字典)

    字典(dict) info={ "k1":"v1", "k2":"value" } 字典的value可以是任意值,布尔值 ...

  9. SpringBoot微服务电商项目开发实战 --- api接口安全算法、AOP切面及防SQL注入实现

    上一篇主要讲了整个项目的子模块及第三方依赖的版本号统一管理维护,数据库对接及缓存(Redis)接入,今天我来说说过滤器配置及拦截设置.接口安全处理.AOP切面实现等.作为电商项目,不仅要求考虑高并发带 ...

  10. 【CV现状-3.2】纹理与材质

    #磨染的初心--计算机视觉的现状 [这一系列文章是关于计算机视觉的反思,希望能引起一些人的共鸣.可以随意传播,随意喷.所涉及的内容过多,将按如下内容划分章节.已经完成的会逐渐加上链接.] 缘起 三维感 ...