当前位置: 首页 > news >正文

Vue源码总结

1,根据vue工程package.json配置文件查看scripts命令,找到build命令执行的js文件

2,根据构建执行的js文件继续跟进,找到主入口文件

3,从主入口文件直接分析主干代码,追踪export的Vue对象

4,跟进到最内层,发现Vue对象其实就是一个构造函数,构造函数内调用了_init()方法。因此在我们new Vue(options)的时候,实例化Vue执行就会调用此方法

5,在vue加载完成之后,初始化了initMixin, stateMixin, eventsMixin, lifecycleMixin, renderMixin这5个方法

6,initMixin中定义了_init函数,这个函数的核心流程是:

合并options配置挂载到vm.$options;

调用initLifecycle初始化vm.$parent, vm.$root, vm.$children, vm.$refs 等属性值;

调用initEvents初始化事件系统,实际上是v-on和@的注册的事件;

调用initRender初始化渲染,通过执行createElement函数执行并返回虚拟DOM;

调用beforeCreate钩子;

调用initInjections函数初始化父子组件的inject和provide(二者成对出现);

调用initState初始化state, props, methods, computed, watch等,将data, props都挂载到vm._data, vm._props上,设置访问数据代理,访问this.xx就是访问vm.xx;

调用initProvide函数,同initInjections;

调用created钩子。

7,stateMixin中,对_data(vm.$data), _props(vm.$props)使用 Object.defineProperty 添加响应式

8,eventsMixin中,在Vue原型上定义$on, $once, $off, $emit 事件方法,并返回vm

9,lifecycleMixin中,在Vue原型上定义 _update, $forceUpdate, $destroy方法

10,renderMixin中,在Vue原型上定义$nextTick方法和_render方法(该方法会调用vm.$createElement创建虚拟DOM)

http://www.lryc.cn/news/207014.html

相关文章:

  • 记一次调试微信订阅消息的坑
  • ASP.NET Core3.1 API 创建(Swagger配置、数据库连接Sql Server)、开发、部署
  • 大数据之LibrA数据库常见术语(八)
  • 【实战】Kubernetes安装持久化工具NFS-StorageClass
  • 透明安全地解释Moonbeam基金会分配的GLMR去了哪
  • python安装包失败 安装scipy包
  • 解决javascript报错:SyntaxError: Invalid Unicode escape sequence
  • 【Python第三方包】使用Python的Translate包进行文本翻译
  • 【OpenCV实现图像阈值处理】
  • 【Python机器学习】零基础掌握StackingRegressor集成学习
  • JVM(Java Virtual Machine)G1收集器篇
  • 微信小程序设计之主体文件app-json-tabBar
  • GZ035 5G组网与运维赛题第2套
  • 如何训练Embedding Model
  • springboot配置redis、Spring cache
  • 悟空crm安装搭建 报错[0] RedisException in Redis.php line 56问题处理办法
  • Ubuntu22.04 交叉编译阿里oss c-sdk
  • arch linux 安装 vsftpd 配置虚拟用户
  • Django的查询所有,根据用户名查询,增加用户操作
  • 【adb】adb相关命令行及adb传输文件权限问题 remote couldn‘t create file: Read-only file system
  • 基于物联网云平台的分布式光伏监控系统的设计与实现
  • 初识Node.js开发
  • 【Python入门教程】基于OpenCV视频分解成图片+图片组合成视频(视频抽帧组帧)
  • 微前端qiankun接入Vue和React项目
  • 提升技能,一触即达!全新在线题库微信小程序等你来挑战!
  • 语雀P0级故障复盘,有9个字亮了
  • 在 openresty 中使用 capnp lua 库
  • 私藏小技巧:让微信朋友圈营销方便化的小窍门!
  • Centos使用tomcat部署jenkins
  • uni-app打包apk实现自动更新