首页 > 其他分享 >render学习

render学习

时间:2023-05-02 17:33:26浏览次数:50  
标签:Vue 函数 render DOM 学习 节点 模板

一.前言

1.vue程序的运行过程:模板 -> 进行编译 -> 生成ast树 -> 数据绑定 -> 生成render函数 -> 成虚拟dom树 -> 真实dom树

  • 模板:Vue的模板基于纯HTML,基于Vue的模板语法,我们可以比较方便地声明数据和UI的关系。

  • AST:AST是Abstract Syntax Tree的简称,俗称‘抽象语法树’它是一种数据结构。是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

  • 渲染函数:渲染函数是用来生成Virtual DOM的。Vue推荐使用模板来构建我们的应用界面,在底层实现中Vue会将模板编译成渲染函数,当然我们也可以不写模板,直接写渲染函数,以获得更好的控制 (这部分是我们今天主要要了解和学习的部分)。

  • Dom树:当浏览器读到HTML代码时,它会建立一个DOM节点树来保持追踪,如果你会画一张家谱树来追踪家庭成员的发展一样。每个元素都是一个节点。每片文字也是一个节点。甚至注释也都是节点。一个节点就是页面的一个部分。就像家谱树一样,每个节点都可以有孩子节点 (也就是说每个部分可以包含其它的一些部分)。

  • Virtual DOM:虚拟DOM树就是为了解决浏览器性能问题而被设计出来的,其实就是一个普通的js对象,它是用来描述一段HTML片段的。当页面发生改变Vue会再创建一颗新的虚拟DOM树,前后两颗新旧虚拟DOM树进行对比,Vue通过diff算法,去记录差异的地方将有差异的地方更新到真实的DOM树中,可以大大缩短响应的时间。

综上:

(1)如果直接使用render函数,就省略了模板的编译过程,vue运行的更快。

(2)Vue的编译器在编译模板之后,会把这些模板编译成一个渲染函数。而函数被调用的时候就会渲染并且返回一个虚拟DOM的树。

2.数据更新机制

每个Vue组件都有一个对应的watcher,这个watcher将会在组件render的时候收集组件所依赖的数据(比如data中定义的那些),当依赖有更新的时候,Vue自身的响应式系统就会监听到数据的变化,就会重新渲染(也就是从头重新执行一遍直到render函数走完),当重新进行渲染之后,会生成一个新的虚拟树,将新的树与旧的树进行对比,就可以最终得出应施加到真实DOM上的改动。

二.Render函数

1.使用场景render 函数(渲染函数 跟 template 一样都是创建 html 模板的,但是有些场景中用 template 实现起来代码冗长繁琐而且有大量重复,这时候就可以用 render 函数

2.render函数介绍

render函数的返回值:VNode(即:虚拟节点),也就是我们要渲染的节点。

render 函数的参数createElement 是 render 函数 的参数,它本身也是个函数,并且有三个参数如下。

createElement(参数1,参数2,参数3); 

参数1:想渲染的html标签名或者组件名不区分大小写,用引号括起来,例如:'div','span',。---必填

参数2:该dom节点的配置的数据对象,如id,class,style,事件等(具体请参考文档【深入数据对象】的描述)。---非必填

参数3:是一个数组,数组里面存放子元素。若还要创建子元素,则可以在数组中继续写createElement函数。---非必填

(有关createElement具体使用,例如添加事件监听,如何使用插槽等,都可参考Vue官方文档)

3.具体用法

(1)用法一:基本使用场景,也就是render函数中只传入一个参数-createElement。

格式为:render: function (createElement)

实例如:见代码

引入jsx插件的写法(需要安装一个插件,写起来更接近template中的代码):

(2)用法二:render函数传入两个参数------(见官方文档中【函数式组件】的描述)

格式为:render: function (createElement, context)

其中context是一个对象,组件需要的一切都是通过它来传递的。 

标签:Vue,函数,render,DOM,学习,节点,模板
From: https://www.cnblogs.com/131362wsc/p/17367968.html

相关文章

  • 代码自测学习
    1.tensor索引[:,0:3,] 代表从0行开始,一共3-0行b=torch.arange(16,dtype=float).reshape(1,4,4)print(b)print(b[:,0:1,]) ......
  • Vue指令学习
    1.指令的定义指令(Directives)是带有 v- 前缀的特殊attribute。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM。指令还有一些基本的要了解的就是指令的修饰符(.native,.stop,.prevent等),动态参数(<a@[event]="doSomething">),缩写(:,@等)。这些都是......
  • 《重构:改善既有代码的设计》学习笔记
    代码的坏味道名称说明重构手法神秘命名MysteriousName好的命名能够节省时间改变函数神秘、变量改名、字段改名重复代码DuplicatedName重复代码让人不得不留意其中的细微差异提炼函数、移动语句、函数上移过长函数LongFunction函数越长,就越难理解提炼函......
  • 迁移学习(VMT)《Virtual Mixup Training for Unsupervised Domain Adaptation》
    论文信息论文标题:VirtualMixupTrainingforUnsupervisedDomainAdaptation论文作者:TakeruMiyato,S.Maeda,MasanoriKoyama,S.Ishii论文来源:2019CVPR论文地址:download 论文代码:download视屏讲解:click   ......
  • 点分治学习笔记
    点分治序列上的操作可以用很多方式维护,线段树树状数组平衡树啥的,但是如果毒瘤出题人把序列搬到了树上,则需要一些奇妙方法。一般有两种(好几种?)方法:树链剖分,把树上路径转化成dfn序上的多段进行操作。LCT,不多说,目前只会板子,没搞太懂。点分治,这个是不用把树转化成序列的,而是将树......
  • Qt 学习笔记
     1.  *newClass 与引用<qpushbutton.cpp>:QPushButton::QPushButton(QWidget*parent):QAbstractButton(*newQPushButtonPrivate,parent){Q_D(QPushButton);d->init();}<qabstractbutton.cpp>:/*!\internal*/对应的函数原型......
  • vue学习 第七天 清除浮动 (clear:xxx)
    清除浮动 问题一、父元素不方便设置高度,子元素设置浮动(不占位置),父元素的高度会默认为0,就会影响下面的标准流的盒子。总结:子盒子浮动,父盒子失去高度,影响了整体布局1、清除浮动的原因由于浮动元素不再占用原文档流的......
  • vue学习 第六天 浮动 (float) 和 页面传统布局(标准流、浮动、定位)。
    浮动(float)1、传统网页布局的三种方式(3种)网页布局的本质---用CSS来摆放盒子。把盒子摆放到相应位置。CSS提供了三种传统布局方式(盒子如何进行排列顺序):普通流(标准流)、浮动、定位2、标准流(普通流/文档流)就是标签按照规定好默认方式排......
  • 联邦学习基础
    作者:程勇链接:https://zhuanlan.zhihu.com/p/87858287来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。联邦学习(FederatedLearning,a.k.a.FederatedMachineLearning)可以分为三类:横向联邦学习(HorizontalFederatedLearning),纵向联邦学习(Vertical......
  • vue学习 第五天 css基础 --- ps操作 / 圆角边框(border-radius) / 阴影(盒子/文字)b
      ps基本操作1、ps的基本操作2、ps快捷操作的位置3、样式书写习惯 4、样式设置的小细节(注意)1、图片设置width:100%这样图片的宽度就不会超过父容器的宽度。2、块元素没有设置宽度,给margin左右是没有效果的。......