1.new Vue的过程

1)首先Vue是一个类,初始化时已经添加很多

initMixin(Vue)             给原型添加Vue.prototype._init 
stateMixin(Vue)     
eventsMixin(Vue)  
lifecycleMixin(Vue)  给原型添加Vue.prototype._update
renderMixin(Vue)   给原型添加vm.$createElement

2)new vue的constructor里面执行了this._init
_init里面有实例对象里面写了$el会触发挂载$mount

if (vm.$options.el) {
      vm.$mount(vm.$options.el)
 }
 $mount=>mountComponent=>=>

 
 
Vue.prototype.__patch__ = inBrowser ? patch : noop   在runtime中的index
 

2._update和_render是$mout的核心

_update在lifecycle页面中的lifecycleMixin添加到vm实例对象上  通过vnode创建dom并挂载,并将vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */)  首次渲染 或者vm.$el = vm.__patch__(prevVnode, vnode) 跟新渲染
_render在render页面中的renderMixin添加到vm实例对象上  返回vnode
 
2.$mount在不同platform中的runtime index里面 ;  $el是在mountComponent里添加
vm.prototype.$mount 里面 ;利用core/instance/lifecycle的mountComponent方法

3.path方法创建dom节点=》递归创建子节点=》invokeCreateHooks

createElm 的作⽤是通过虚拟节点创建真实的 DOM 并插⼊到它的⽗节点中。 我们来看⼀下它的⼀些关键逻辑, createComponent ⽅法⽬的是尝试创建⼦组件,vnode并不是组件时它的返回值为 false;接下来判断 vnode 是否包含 tag,如果包含,先简单对tag 的合法性在⾮⽣产环境下做校验,看是否是⼀个合法标签;然后再去调⽤平台 DOM 的操作去创建⼀个占位符元素。

⾸次渲染我们调⽤了 createElm ⽅法,这⾥传⼊的 parentElm 是oldVnode.elm 的⽗元素, 在我们的例⼦是 id 为 #app div 的⽗元素,也就是 Body;实际上整个过程就是递归创建了⼀个完整的 DOM 树并插⼊到 Body 上。

怎么替换原有的container盒子????

 

4.patch 细节

没跟节点时

createElm的parentElm不同情况

5.组件渲染

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

vm.$parent

vm.$children

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

vm.$vnode

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

componentVNodeHooks里执行完createComponentInstanceForVnode  ==》执行child.$mount(hydrating ? vnode.elm : undefined, hydrating);

mountComponent==>触发child._update=》 先render()后_patch=>

6.响应式原理

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

最新文章

  1. 重新格式化hdfs系统的方法
  2. thinkphp join 查询
  3. CentOS 7 安装virtualBox
  4. River Hopscotch(二分最大化最小值)
  5. 热爱H5
  6. fis3+vue+pdf.js制作预览PDF文件或其他
  7. wenpack-simple+elementUI配置
  8. FAT32文件系统的存储组织结构(二)
  9. visual studio 2017使用技巧
  10. 利用IP核设计高性能的计数器
  11. VR开发 VR development
  12. Altium Designer PCB的时候 高亮显示引脚连线
  13. 阅读别人的程序(Java篇)
  14. spring基础---->spring自定义初始化(二)
  15. toArray()
  16. log4net 使用指南,最常遇到的问题整理。。。
  17. Shell下syntax error: operand expected (error token is “-”)
  18. 使用IDEA快速搭建Gradle项目
  19. ACM模板~求逆序对的个数
  20. 一良心操盘手:我们是这样玩死散户的! z

热门文章

  1. React里单页面div自适应浏览器高度占满屏幕
  2. hibernate关联映射之多对多
  3. vue3.x版本安装vue-cli建项目
  4. 等待数据库引擎恢复句柄失败 SqlServer2012安装时报错 Win10
  5. python多进程——multiprocessing.Process
  6. OSI七层模型非专业简介
  7. Elasticsearch unassigned 故障排查
  8. 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
  9. vscode setting.json (@vue/eslint-config-prettier)
  10. nodejs加解密