美文网首页
Vue源码解读——数据驱动(二)

Vue源码解读——数据驱动(二)

作者: wdapp | 来源:发表于2020-02-06 11:25 被阅读0次

数据驱动的理解

vue是一种mvvm模式的js库,特点就是数据驱动,数据双向绑定,组件化。由于前端变成过程中频繁的操作dom是很消耗性能而且代码不易维护。数据驱动可以让我在开发过程中只关注数据和视图,减少dom操作提高性能,使项目更易读,易维护。

new Vue 发生了什么

new Vue的时候会通过我们传入的参数解析,把el通过mount挂载到vm上,接管DOM,渲染数据,目的是为了把模板最终渲染成DOM。

Vue实例挂载的实现

主要通过Vue.prototype.mount实现示例挂载,mount返回mountComponent函数,会执行vm._update(vm._render(),hydrating)渲染真实DOM,并且会有一个渲染Watcher,进行监听,当数据改变的时候,调用vm._update重新渲染。

分析下render函数

Vue.prototype._render会调用我们在初始化Vue时传入的render,并且调用时,返回createElement,createElement返回的是vnode虚拟节点

vue如何实现调用data的时候进行劫持的

vue通过proxy代理模式对data数据进行代理。当我们访问data中的数据的时候,可以省略data,直接访问data中的字段获取值

什么时候虚拟DOM,vnode

虚拟dom就是通过js对真实dom的一个抽象,通过js来模拟dom。这样可以减少dom操作,和渲染次数,节约性能。vue通过vnode实现virtual dom,借鉴了一个开源库snabbdom

分析createElement函数源码实现

主要是把我们的js数据变成vnode,并且会把children变成子vnode,形成vnode tree这样就很想一个真实的dom结构了,下一步就是把vnode渲染成真实的node。回到mountComponet函数就是为了调用createElement生成vnode,然后通过vm._update(vm._render(),hydrating)渲染成真实的dom

vm._update 把VNode渲染成真实DOM

vm._update在初始化的时候调用一次,数据更新的时候回通过渲染Watch重新渲染。

vm._update 调用的是 vm.patch(vm.$el, vnode, hydrating, false /* removeOnly */),参数分别对应 真实DOM,VNode是否开启服务端渲染,removeOnly。

每个平台会有不同的path方法,如服务端没有DOM就是空函数,path会调用createPatchFunction函数,使用函数柯里化来处理不同平台的path,把公用的path代码放在core目录下,不同的path代码放在各平台目录下,通过传参来区分path。之所以使用函数柯里化是因为如果不同平台通过条件语句来判断,会造成每次执行path都需要判断,函数柯里化很好的解决了此问题,在初始化函数的时候就应该把参数传入modules和 nodeOps,并且返回新的函数,直接使用即可。

createPatchFunction会调用createElm根据VNode创建真实DOM并通过insert封装的 DOM API 把VNode映射的真是DOM插入到根节点上,最后把跟节点挂载到HTML文档中

从new Vue 到渲染真实DOM过程:new Vue() -> init -> compile * -> render -> vnode -> _update -> patch -> DOM

相关文章

  • Vue源码解读——数据驱动(二)

    数据驱动的理解 vue是一种mvvm模式的js库,特点就是数据驱动,数据双向绑定,组件化。由于前端变成过程中频繁的...

  • Vue源码分析—数据驱动(二)

    Virtual DOM Virtual DOM这个概念相信大部分人都不会陌生,它产生的前提是浏览器中的DOM是很“...

  • Vue源码--数据驱动

    VUE核心思想是数据驱动,比如在使用之中 我们在界面上点击按钮修改数据 ,在vue上只需要修改数据即可,DOM就会...

  • vue简介

    1.vue特性 vue框架有两个特性 数据驱动视图 双向数据绑定 1.1 数据驱动视图 在使用vue的页面中,vu...

  • 2020 vuejs 数据驱动(Zig)

    数据驱动 Vue.js 的核心思想就是数据驱动。那么什么是数据驱动呢? 数据驱动就是视图由数据决定,数据作为主动。...

  • Vue源码分析—数据驱动(一)

    Vue.js一个核心思想是数据驱动。所谓数据驱动,是指视图是由数据驱动生成的,我们对视图的修改,不会直接操作DOM...

  • Vue(2.6.11)源码阅读——数据驱动

    本文目录:1. new Vue2. Vue 挂载的实现3. render4. Visual DOM5. creat...

  • Vue-入门

    一.认识vue 1.什么是vue 以数据驱动的web渐进式框架 2.vue优点 以数据驱动,不直接操作DOM,效率...

  • vue 复习1

    一、如何理解vue:vue是一款组件化,数据驱动的mvvm框架 二、 vue安装:vue提供了脚手架,方便开发者开...

  • vue获取DOM

    1.前言 1.js DOM驱动 nodejs事件驱动2.vue可以理解成 数据驱动3.所以vue一般是通过操作数据...

网友评论

      本文标题:Vue源码解读——数据驱动(二)

      本文链接:https://www.haomeiwen.com/subject/wnmyxhtx.html