Vue底层实现原理总结

news/2024/7/10 1:57:33 标签: vue

Vue是一个典型的MVVM框架,模型(Model)只是普通的JavaScript对象,修改它则视图(View)会自动更新。这种设计让状态管理变得非常简单而直观。那么Vue是如何把模型和视图建立起关联的呢?

实现原理概述

这是前言提到的文章里的代码,一段典型的体现了Vue特点的代码:

<div id="mvvm-app">
  <input type="text" v-model="word">
  <p>{{word}}</p>
  <button v-on:click="sayHi">change model</button> //点击这个button,word的值会发生改变
</div>
 
<script src="./js/observer.js"></script>
<script src="./js/watcher.js"></script>
<script src="./js/compile.js"></script>
<script src="./js/mvvm.js"></script>
<script>
  var vm = new MVVM({
    el: '#mvvm-app',
    data: {
      word: 'Hello World!'
    },
    methods: {
      sayHi: function() {
        this.word = 'Hi, everybody!';
      }
    }
  });
</script>

前端全栈学习交流圈:866109386,面向1-3经验年前端开发人员,帮助突破技术瓶颈,提升思维能力,群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

ue实现这种数据双向绑定的效果,需要三大模块:

Observer:能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
Compile:对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
Watcher:作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图

Observer

Observer的核心是通过Obeject.defineProperty()来监听数据的变动,这个函数内部可以定义setter和getter,每当数据发生变化,就会触发setter。这时候Observer就要通知订阅者,订阅者就是Watcher。

Watcher

Watcher订阅者作为Observer和Compile之间通信的桥梁,主要做的事情是:

  • 在自身实例化时往属性订阅器(dep)里面添加自己
  • 自身必须有一个update()方法
  • 待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调

Compile

Compile主要做的事情是解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图。

总结

以上就是本次整理关于Vue底层实现原理的全部知识内容,如果大家还有任何不明白的地方可以在下方的留言区讨论。


http://www.niftyadmin.cn/n/1301007.html

相关文章

VSCode 编译TypeScript的nodeJs项目

本人nodeJs新手&#xff0c;现在公司已经有一个可以运行的项目&#xff0c;但是还不懂怎么在本地&#xff08;自己的电脑&#xff09;编译并运行项目。 在网上查了一些资料和请教了自己的同事之后&#xff0c;总结得出&#xff1a; 1、node_modules&#xff1a;我们应该在项目…

指针与二维数组

#include <stdio.h> int main() {int a[3][4] = { 00,01,02,03, 10,11,12,13, 20,21,22,23 }; //---------------------------------------下面2种等价--------------------------------…

一个前端程序员的日常生活

程序员的生活很简单&#xff0c;天天对着电脑&#xff0c;偶尔休息了也在家看看电影&#xff0c;打打游戏&#xff0c;作为一枚前端&#xff0c;我简单的说下&#xff0c;我这天天的生活吧 早上起来的时候&#xff0c;一般都是8:30上班&#xff0c;然后定闹钟定到6:30一个6:40…

程序员应该上的网站

https://stackoverflow.com/ 有干货的地方。代码遇到相关问题经常被导到这个网站去&#xff0c;回答质量很高&#xff0c;排版简洁清晰。 https://github.com/ 最大的开源中心&#xff0c;项目五花八门&#xff0c;从华贵绚丽的界面到低调实用的小类库&#xff0c;应有尽有…

CocosCreator实现划过的位置显示纹理

1、项目需求 项目需要有一个功能&#xff1a;是当一个光点走过的路径&#xff0c;这个路径的位置就都亮起来的功能。 2、资料内容 功能类似这位大神的橡皮擦功能&#xff1a;https://forum.cocos.org/t/2-0-8/74246 但是&#xff0c;项目的需求还要经过的路径周围有模糊的外边…

Java配置----JDK开发环境搭建及环境变量配置

【声明】 欢迎转载&#xff0c;但请保留文章原始出处→_→ 生命壹号&#xff1a;http://www.cnblogs.com/smyhvae/ 文章来源&#xff1a;http://www.cnblogs.com/smyhvae/p/3788534.html 【正文】 1、安装JDK开发环境 下载网站&#xff1a;http://www.oracle.com/ 开始安装JDK&…

游戏帧同步的流程与实现

文章转载自&#xff1a;https://www.jianshu.com/p/8cca5458c45b 大纲 帧同步的基本原理帧事件数据采集帧同步的事件处理与动画帧同步的逻辑数据同步帧同步之跳帧处理 现代多人游戏中&#xff0c;多个客户端之间的通讯大多以同步多方状态为主要目标&#xff0c;为了实现这一目…

VUE基于NUXT的SSR 服务端渲染

Server Side Rendering&#xff08;服务端渲染&#xff09; SSR 目的是为了解决单页面应用的 SEO 的问题&#xff0c;对于一般网站影响不大&#xff0c;但是对于论坛类&#xff0c;内容类网站来说是致命的&#xff0c;搜索引擎无法抓取页面相关内容&#xff0c;也就是用户搜不…