其实现在这个还没看懂,只能是初步看一下

_update调用__patch__方法,如果prevVnode(也就是oldVnode),旧vnode和新vnode对比,如果没有,就vnode就是vm.$el,就是挂载的那个真实node

这样进入patch方法之后,先判断oldVnode是否定义了,如果没有,说明这是VueComponent在_init方法中调用到了本方法,这里下面再说。

如果oldVnode定义了,且是真实节点,说明是new Vue 的那个vm在_init方法中调用到了本方法,那么调用createElm方法,创建新节点,递归创建子节点,并用新节点替换掉之前挂载的节点

如果oldVnode定义了,且是虚拟节点,说明是vm(根Vue或者组件)在_update方法中调用了本方法,那么patchVnode,对比(这里还要细看)。

创建新节点:createElm方法,首先判断是不是组件节点,如果不是,比如第一次要挂载的根Vue节点,或者真实节点,先创建node(setScope这里是给stypeScoped生成data-XXXXX?),invokeCreateHooks把属性设置进去

然后创建(递归)子节点,

-----------------------------------

几个疑问:

1、patch中的createElm方法是创建真实节点,如果不是组件节点,在createChildren递归创建子节点之后,if (isDef(data)) {invokeCreateHooks(vnode, insertedVnodeQueue);}这句话的意思?

点进去,cbs是一个数组,大概8个元素,里面的方法主要是来create或者update attr,class,on,style这些节点属性的,如果新节点有而旧节点没有那么就添加,如果新节点没有而旧节点有就删除掉。

再往下,是data.hook的,但是这个hook是在_c方法中一路下来在createComponent方法中,installComponentHooks方法中添加到vnode.data中的,也就是说只有创建组件节点的Vnode的时候data里面才有hook属性。然而当前是

创建真实节点的逻辑,为什么会判断hook呢?

Vue源码之 diff Vnode的更多相关文章

  1. Vue源码终笔-VNode更新与diff算法初探

    写完这个就差不多了,准备干新项目了. 确实挺不擅长写东西,感觉都是罗列代码写点注释的感觉,这篇就简单阐述一下数据变动时DOM是如何更新的,主要讲解下其中的diff算法. 先来个正常的html模板: & ...

  2. vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)

    vue源码业余时间差不多看了一年,以前在网上找帖子,发现很多帖子很零散,都是一部分一部分说,断章的很多,所以自己下定决定一行行看,经过自己坚持与努力,现在基本看完了,差ddf那部分,因为考虑到自己要换 ...

  3. 大白话Vue源码系列(05):运行时鸟瞰图

    阅读目录 Vue 实例的生命周期 实例创建 响应的数据绑定 挂载到 DOM 节点 结论 研究 runtime 一边 Vue 一边源码 初看 Vue 是 Vue 源码是源码 再看 Vue 不是 Vue ...

  4. 【一套代码小程序&Native&Web阶段总结篇】可以这样阅读Vue源码

    前言 前面我们对微信小程序进行了研究:[微信小程序项目实践总结]30分钟从陌生到熟悉 在实际代码过程中我们发现,我们可能又要做H5站又要做小程序同时还要做个APP,这里会造成很大的资源浪费,如果设定一 ...

  5. 前端Vue 源码分析-逻辑层

    Vue 源码分析-逻辑层 预期的效果: 监听input的输入,input在输入的时候,会触发 watch与computed函数,并且会更新原始的input的数值.所以直接跟input相关的处理就有3处 ...

  6. Vue源码学习1——Vue构造函数

    Vue源码学习1--Vue构造函数 这是我第一次正式阅读大型框架源码,刚开始的时候完全不知道该如何入手.Vue源码clone下来之后这么多文件夹,Vue的这么多方法和概念都在哪,完全没有头绪.现在也只 ...

  7. Vue源码分析(二) : Vue实例挂载

    Vue源码分析(二) : Vue实例挂载 author: @TiffanysBear 实例挂载主要是 $mount 方法的实现,在 src/platforms/web/entry-runtime-wi ...

  8. vue源码实现的整体流程解析

    一.前言 最近一直在使用vue做项目,闲暇之余查阅了一些关于vue实现原理的资料,一方面对所了解到的知识做个总结,另外一方面希望能对看到此文章的同学有所帮助.本文如有不足之处,还请过往的大佬批评指正. ...

  9. [Vue源码]一起来学Vue模板编译原理(二)-AST生成Render字符串

    本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...

随机推荐

  1. Pandas 基础(15) - date_range 和 asfreq

    这一节是承接上一节的内容, 依然是基于时间的数据分析, 接下来带大家理解关于 date_range 的相关用法. 首先, 引入数据文件: import pandas as pd df = pd.rea ...

  2. ArcGIS Pro开发Web3D应用(4)——Portal发布三维没有“发布”选项解决

    如题,将三维场景包.slpk上传并发布,未看到发布选项. 问题核心就在于环境没配置好,主要有2点: 1.验证联合托管状态 需要将托管服务器与Portal进行联合,并进行验证,此情况需要在WebAdap ...

  3. rtf乱码解决办法

    首先,阐述下rtf,富文本格式文档,目前常用来做模板: 我遇到的问题是rtf中替换后的文本显示是正常的,rtf直接转pdf就不正常了,通过notpad++ 打开后发现rtf本身内容编码是我没有见过的( ...

  4. linux运行进程实时监控pidstat详解

  5. java中的JSON数据转换方法fastjson

    1 maven工程引入fastjson <?xml version="1.0" encoding="UTF-8"?> <project xml ...

  6. jquary 选择器,dom操作知识点

    选择器: 1. 基本选择器 1. 标签选择器(元素选择器) * 语法: $("html标签名") 获得所有匹配标签名称的元素 2. id选择器 * 语法: $("#id的 ...

  7. php代码审计——DVWA

    1.命令注入: LOW等级: 输入没有任何限制,可以直接ping: Medium等级: 介绍一下str_replace()函数和array_key()函数: Str_replace(str1,str2 ...

  8. python 数据分析基础

    安装Python基础的几个数据分析库: pip install pandas pip install numpy pip install scipy pip install scikit-surpri ...

  9. Cmake时 如何在windows命令行 选择vs版本

    本人电脑装了VS2017 和 VS2013版本.可能时VS2017安装的时间早,每次cmake文件时优先选择编译成VS2017的文件 可通过查看VS2013的版本,使用 cmake ../pcl-su ...

  10. 解决移动端真机不能下拉滚动bug

    在近期的移动端开发中,发现浏览器中调试可以正常滚动,而在真机中却不能滚动了,这是为什么呢??? 总结了一下主要有一下两方面:css的设置和js的设置 1.之前有设置css的原因,下面分先说css的问题 ...