Vue 的 render 渲染

API

vue2 的 vnode

tag: 当前节点的标签名

data: 当前节点是数据对象

children: 子节点,数组也是vnode 类型

text: 当前节点的文本,一般文本节点或注释节点会有该属性

elm: 当前虚拟节点对应的真实的DOM节点

ns: 节点的namespace

content :编译作用域

functionalContext 函数话组件作用域

key: 节点的key属性,用于作为节点的标识,利于patch 的优化

componentOPtions: 创建组件实例会用到的选项信息

child: 当前节点对应的组件实例

parent:组件的站位节点

raw: 原始的html

isStatic : 静态节点标识

isRootInsert: 是否作为根节点插入,被包裹的节点,该属性的值为false

isComment: 当前的节点是否是注释节点

isCloned: 当前的节点是否是克隆节点

isOne: 当前节点是否有v-once 指令

vNode

TextVNode 文本节点

ElementVNode 普通元素节点

ComponentVnode 组件节点

EmptyVNode: 组件节点

CloneVNode 克隆节点,可以是任意类型的节点,唯一的区别是isCloned 的属性为TRUE

解决的场景

  • 代码的冗长
  • template 中的大部分是重复的
  • 外层的中必须包含无用的div

createElement用法(h)

eg: creteElement(

'div',

// {object}

// 一个对应属性的数据对象,可选 可以在template中使用

{},

// {string |atrray}

// 子节点{VNode}, 可选

[

createElement('h1', 'hello world'),

createElement('mycomponent', {

props:{

someProp: 'foo'

}

}),

]

)

第一个: 一个参数必选,可以是一个html 标签,也可是一个组件或者是一个函数{string | object | Function} 必须return 上述其中的一个

第二个: 可选参数 数据对象

vueNodeData

key? :string | number

slot? string;

scopedSlots?:{[key: string]: scopedSlot},

ref?:String;

tag?:string;

staticClass?:string;

class?:any;

staticStyle?{[key:string]: any}

	style: Object[] | object
props? {[key:string]: any}
attrs?: {[key:string]: any}//HTML 属性
domProps?:{[key:string]: any}
hook?:{[key:string]: Function}
on?:{[key:string]: Function | Function[]} // 自定义事件
nativeOn?: {[key:string]: Function | Function[]} // 原生事件
transition?:Object
show?: boolean
inlineTemplate?:{
render: Function;
staaticRenderFns: Function[];
}
directives?: VNodeDirective[];
keepAlive?: boolean;

第三个: 是子节点,也是可选用法一至

约束

所有组件树中,如果VNODE是组件,或含有组件的slot,那VNode 必须唯一

1、错误的用法,以为子组件重复了

2、因为slot包含了组件 并且重复了




使用JavaScript 代替模板的功能

在render 中没有指令 一切都可以用js 来实现。

slot的默认内容

// this.$slots.default 等于undefined

说明组件中没有定义的slot 这是就可以自定义内容

函数化组件

vue.js 提供了一个functional 的布尔值选项,设置为TRUE可以使组件无状态和无实例,也就是无data 和this上下文。这样用render函数返回

虚拟几点合一变得更加容易渲染,因为函数话组件只是一个函数,渲染开销要小的很多

使用函数话组件的时候render 提供了第二个参数来提供临时上下文

适用场景

1、程序化地在多个组件中选择一个

2、在将children props data 传递给子组件之前操作他们

vue render的更多相关文章

  1. vue render里面的nativeOn

    vue render里面的nativeOn的解释官方的解释是:// 仅对于组件,用于监听原生事件,而不是组件内部使用 `vm.$emit` 触发的事件. 官方的解释比较抽象 个人理解: 父组件要在子组 ...

  2. vue render function & dataset

    vue render function & dataset https://vuejs.org/v2/guide/render-function.html#The-Data-Object-In ...

  3. vue render & array of components & vue for & vue-jsx

    vue render & array of components & vue for & vue-jsx https://www.cnblogs.com/xgqfrms/p/1 ...

  4. vue render function

    vue render function https://vuejs.org/v2/guide/render-function.html { // Same API as `v-bind:class`, ...

  5. vue render 渲染函数

    vue render 渲染函数 经常看到使用render渲染函数的示例,而且在一些特殊情况下,确实更好使用,可以更加有效地细分组件,因而借助vue-element-admin来学习一波 render函 ...

  6. vue render html string

    vue render html string shit element ui render string array relativeShowConvert(data) { // log(`data` ...

  7. vue render函数 函数组件化

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

  8. vue render函数

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

  9. vue render & JSX

    vue在绝大多数使用template是没问题的,但在某些场合下,使用render更适合. 一.render函数 1.createElement 参数 createElement 可接受三个参数 1){ ...

  10. vue render {} 对象 说明文档

    Vue学习笔记进阶篇——Render函数 http://www.mamicode.com/info-detail-1906336.html 深入data object参数 有一件事要注意:正如在模板语 ...

随机推荐

  1. 小红书第五章——引用类型之function类型

    有趣的函数——function类型 函数实际上是对象,每个函数都是function类型的实例,具有属性和方法. 1.函数的定义方法 1)函数声明语法 function sum(num1,num2){/ ...

  2. Spring MVC-从零开始-@RequestMapping结合@RequestParam (从HTTP键值对中取值,作用于函数参数)

    1.@RequestParam 注解使用的时候可以有一个值,也可以没有值:如果请求参数和处理方法参数的名称一样的话,@RequestParam 注解的 value 这个参数就可省掉了:@Request ...

  3. Scala XML

    XML 直接在代码中使用 XML 字面量 val doc: Elem = <html><head><title>Test</title></hea ...

  4. Nature Methods | 新软件SAVER-X可对单细胞转录组学数据进行有效降噪

                                                                          图片来源(Nature Methods)   摘要 单细胞转 ...

  5. 整理一些大厂的开源平台及github,向他们看齐...

    有人苦恼,该如何突破技术的局限性... 有人羡慕,技术上你怎么懂得这么多... 有人哀叹,唉,我已经学不动了... 我的总结(纯属个人想法):身处IT,就得不断学习和积累,才不会被狠狠地甩在身后.什么 ...

  6. 1.Eclipse下载、常用配置、快捷键

    Eclipse官网下载:https://www.eclipse.org/downloads/packages/ 自动补全 位置:Eclipse——Window——Perferences——Java—— ...

  7. css父元素透明度(opacity)对子元素的影响

    首先子元素会继承父元素的透明度: 设置父元素opacity:0.5,子元素不设置opacity,子元素会受到父元素opacity的影响,也会有0.5的透明度. 其次子元素的透明度是基于父元素的透明度计 ...

  8. mac上git安装与github基本使用

    目录 安装git 创建ssh key.配置git 提交本地项目到GitHub 一.安装Git MAC安装Git 首先查看电脑是否安装Git,终端输入: git 1.通过homebrew安装Git 1. ...

  9. wamp server mysql数据库中事件不执行的解决办法

    先看看看event 事件是否开启 直接执行下列语句即可, show variables like '%sche%'; 如没开启,则开启. (需要数据库超级权限) set global event_sc ...

  10. Python flask 构建微电影视频网站☝☝☝

    Python flask 构建微电影视频网站☝☝☝ 1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridD ...