Vue源码系列5------数据驱动-----从初始化到挂载

Vue3 + ECharts 5.4.1 实战:3D环柱饼图完整配置指南(附源码) 本文提供了一份基于Vue3和ECharts 5.4.1构建3D环柱饼图的完整实战指南。详细解析了3D环柱饼图的核心数学模型与参数方程,并逐步演示了从环境搭建、数据准备到高级交互与性能优化的全流程配置,附有可运行的源码示例,帮助开发者在数据可视化项目中实现更具表现力的3D图表效果。 阅读详情

Vue的核心思想之一就是数据驱动。所谓数据驱动,是指视图是由数据驱动生成的,我们对视图的修改,不会直接操作 DOM,而是通过修改数据。所有的修改是基于数据的,不会操作DOM,非常利于维护和更新。


下面先从new Vue看起:

我们都知道,new 关键字在 Javascript 语言中代表实例化是一个对象,而 Vue 实际上是一个类,类在 Javascript 中是用 Function 来实现的,源码在src/core/instance/index.js 中。

可以看到 Vue 只能通过 new 关键字初始化,然后会调用 this._init 方法, 该方法在 src/core/instance/init.js 中定义。

  Vue.prototype._init = function (options?: Object) {
    const vm: Component = this
    // a uid
    vm._uid = uid++

    let startTag, endTag
    /* istanbul ignore if */
    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
      startTag = `vue-perf-start:${vm._uid}`
      endTag = `vue-perf-end:${vm._uid}`
      mark(startTag)
    }

    // a flag to avoid this being observed
    vm._isVue = true
    // merge options
    if (options && options._isComponent) {
      // optimize internal component instantiation
      // since dynamic options merging is pretty slow, and none of the
      // internal component options needs special treatment.
      initInternalComponent(vm, options)
    } else {
      vm.$options = mergeOptions(
        resolveConstructorOptions(vm.constructor),
        options || {},
        vm
      )
    }
    /* istanbul ignore else */
    if (process.env.NODE_ENV !== 'production') {
      initProxy(vm)
    } else {
      vm._renderProxy = vm
    }
    // expose real self
    vm._self = vm
    initLifecycle(vm)
    initEvents(vm)
    initRender(vm)
    callHook(vm, 'beforeCreate')
    initInjections(vm) // resolve injections before data/props
    initState(vm)
    initProvide(vm) // resolve provide after data/props
    callHook(vm, 'created')

    /* istanbul ignore if */
    /*判断el有没有挂载上*/
    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
      vm._name = formatComponentName(vm, false)
      mark(endTag)
      measure(`vue ${vm._name} init`, startTag, endTag)
    }

    if (vm.$options.el) {
      vm.$mount(vm.$options.el)
    }
  }
}

Vue 的初始化逻辑写的非常清楚,把不同的功能逻辑拆成一些单独的函数执行,让主线逻辑一目了然,Vue 初始化主要就干了几件事情,合并配置,初始化生命周期,初始化事件中心,初始化渲染,初始化 data、props、computed、watcher 等等。在初始化的最后,检测到如果有 el 属性,则调用 vm.$mount 方法挂载 vm,挂载的目标就是把模板渲染成最终的 DOM。

 

 

RS485信号测量避坑指南:示波器抓包常见问题与波形分析技巧 本文详细解析了RS485信号测量中的常见问题与解决方案,包括差分信号测量基础、终端电阻配置、共模干扰处理等关键技巧。通过实测波形案例和优化建议,帮助工程师有效提升RS485通信的可靠性和抗干扰能力,适用于工业自动化、远程监测等场景。 阅读详情

相关推荐

基于YOLOv8的多类别检测模型融合实战:从数据集重构到模型训练

本文详细介绍了如何将多个单一类别的YOLOv8检测模型融合为一个高效的多类别检测模型。通过重构数据集、利用预训练模型生成新标签,并重新训练,解决了多模型并行带来的速度慢、资源占用高和部署复杂等问题。实战流程涵盖数据准备、标签生成、模型训练与评估,旨在帮助开发者构建性能优异的YOLOv8多类别检测模型。

kmeans3miner的博客 227

vue源码分析系列一:new Vue的初始化过程

import Vue from ‘vue’(作者用的vue-cli一键生成) node环境下import Vue from 'vue'的作用是什么意思? 在 NPM 包的 dist/ 目录你将会找到很多不同的 Vue.js 构建版本。这里列出了它们之间的差别: 具体参考:官网 完整版:同时包含编译器和运行时的版本。 编译器:用来将模板字符串编译成为 JavaScript 渲染函数的代码。 运行时...

开心大表哥 4111

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(附完整代码)

本文详细解析了Java后端开发中如何通过e签宝API实现电子合同签署的全流程,包括环境配置、核心架构设计、Token管理、签署流程实现及回调处理等关键环节。通过完整的代码示例和最佳实践,帮助开发者高效集成电子签名服务,提升企业数字化转型效率。

weixin_42662293的博客 530

vue 原理解析(三):初始化时created之前做了什么

上一篇 Vue解析原理(二): 初始化时beforeCreate之前做了什么? 我们继续this._init() 的初始化相关操作, 接着又会执行如下三个初始化方法: initInjections(vm) initState(vm) initProvide(vm) 5. initInjections(vm): 主要作用是初始化inject, 可以访问到对应的依赖。 inject 和 prov...

绿足 博客 3429

Rocky Linux 9 远程桌面配置全攻略:从零搭建XRDP服务(含防火墙设置)

本文提供了在Rocky Linux 9上从零开始配置XRDP远程桌面服务的完整指南。详细介绍了系统准备、XRDP服务安装、防火墙与SELinux安全设置、多用户性能优化以及多平台客户端连接实测。重点解决了使用Windows远程桌面协议(RDP)连接Rocky Linux时常见的配置难点与安全问题,帮助用户获得稳定高效的图形化远程访问体验。

vodka的博客 646

GoPro官方API实战:从蓝牙配对到Wi-Fi流媒体,构建跨平台控制应用

本文详细解析了GoPro官方API的开发实践,涵盖蓝牙配对、Wi-Fi流媒体控制等关键技术。通过实战案例,指导开发者如何构建跨平台控制应用,解决设备发现、指令解析、视频流传输等核心问题,并分享Android平台迁移经验与常见问题排查方法。

weixin_30727835的博客 397

linux文件系统初始化过程(2)---挂载rootfs文件系统

本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统。 rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。

落寞微蓝 2万+

Android系统编译之Communication error with Jack server (35), try ‘jack-diagnose‘ or see Jack server log

jack server failed场景个人分析网上分析分析1分析2原因1:权限问题原因2:端口占用原因3:删除 TLSv1, TLSv1.1测试结论解决方案说明相关链接 场景 在进行Android系统开发时,在liunx编译时发生问题,描述如下: ninja: build stopped: subcommand failed. build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed make: *** [ninja_wrapper

weixin_43194854的博客 2401

你知不知道Vue 的初始化过程都做了什么?

1.处理组件配置项2.初始化组件实例的关系属性,比如 $parent、$children、$root、$refs 等3.处理自定义事件4.调用 beforeCreate 钩子函数5.初始化组件的 inject 配置项,得到 ret[key] = val 形式的配置对象,然后对该配置对象进行响应式处理,并代理每个 key 到 vm 实例上6.数据响应式,处理 props、methods、data、computed、watch 等选项7.解析组件配置项上的 provide 对象,将其挂载到 vm._provid

卡卡西:一个擅长拷贝的前端程序员 1952

InvocationException: GraphViz‘s executables not found【BUG已解决】

在机器学习框架中遇到了一个bug:安装了GraphViz模块后,在对着sklearn的决策树文档操作输出决策树模型结果时,还是爆出了如下的错误: 报错位置为: 报错语句为:网上很多答案告诉我们,要我们安装GraphViz模块,然而并不对! 如下,我安装了GraphViz,但是还是报错了。 所以说问题不在这,我查阅质料发现,改正这个bug的方法有一个:下文详细描述。解决bug为: 1.去graphviz.官方下载自己电脑符合的操作系统的安装包:2,安装的时候,记住自己安装在电脑里的位置:以我的电脑为例,我的

一键难忘的博客 3968

软考中级-软件设计师 23种设计模式(最详细解析!!)

软考中级-软件设计师 23种设计模式

片言可决讼,半纸能缚龙 2万+

Vue源码解读(二):初始化和挂载

初始化流程 new Vue 我们在使用 Vue 的时候,首页就是先 new Vue(...) ;在上一章中通过分析构建流程,我们得出入口文件 src/platforms/web/entry-runtime-with-compiler.js ,通过入口文件,我们一步一步找到 Vue 构造函数定义所在: // src/platforms/web/entry-runtime-with-compiler.js // ... import Vue from './runtime/index' // ... // s

qq_35500568的博客 391

手把手教你学Simulink--基础电机控制场景实例:基于Simulink的无刷直流电机六步换相仿真

摘要:本文详细介绍了基于Simulink的无刷直流电机(BLDC)六步换相仿真方法。文章首先阐述了BLDC六步换相控制的原理,包括霍尔传感器定位、六步换相逻辑和方波电流驱动三大支柱。然后通过电动工具(角磨机)应用场景,展示了如何在Simulink中搭建完整的六步换相系统:从主电路构建、霍尔信号生成、Stateflow换相逻辑实现到开环电压控制。仿真结果显示该系统具有低成本优势(仅需霍尔传感器),但存在±20%转矩脉动。文章还提供了核心代码实现,包括霍尔信号生成、六步换相状态机和转矩分析脚本,并对比了六步换相

MHD0815的博客 149

坚持周总结系列第八周(2020.6.6)Vue源码学习(一)

Vue源码学习(一) 数据驱动 vue.js一个核心思想是数据驱动。 所谓数据驱动,是指视图是由数据驱动生成的,我们的视图修改,不会直接操作DOM,而是通过修改数据。它相比我们传统的前端开发,如使用jQuery等前端库直接修改DOM,大大简化了代码量。特别是复杂交互的时候,只关心数据的修改会让代码逻辑变得非常清晰,因为DOM变成了数据映射,我们所有的逻辑都是对数据的修改,而不直接操作DOM,这样的代码也比较利于维护。 new Vue发生了什么? new关键字会实例化一个对象,而Vue本质是一个用functi

前端工程师学习记录 287

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

vue源码学习——响应式数据

系列文章目录 vue源码学习——初始化data vue源码学习——响应式数据 文章目录系列文章目录前言一、observe()二、Observer类三、Dep类三、Watcher总结 前言 在《vue源码学习——初始化data》一文中,知道了在new Vue()时做了一系列初始化操作,其中在初始化data数据时,利用observe(data,true)方法,对数据属性进行了观察。下面来具体看下是如何对data进行的观察~ 一、observe() export function observe (val

娃哈哈_的博客 2568

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vue响应式源码解析(一)

vue响应式源码解析(一) vue.js逐渐热门,在前端框架领域崭露头角这几年,也逐渐成为了前端面试的必考知识点,下面我会通过一系列源码解析的文章来帮助大家梳理这一部分的内容,如有对我的观点持有异议,请在评论区留言,友好交流。 vue的响应式是怎么实现的? 响应式,即vue的数据驱动视图,数据层面发生变化,导致UI进行重新渲染。数据响应式这部分涉及到的知识点有关依赖收集、依赖触发这两部分,核心思想就是将数据变换成observe的getter和setter形式。 依赖收集 我们都知道在JavaScript中,

weixin_43823603的博客 768

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Vue源码阅读 - 文件结构与运行机制

vue已是目前国内前端web端三分天下之一,同时也作为本人主要技术栈之一,在日常使用中知其然也好奇着所以然,另外最近的社区涌现了一大票vue源码阅读类的文章,在下借这个机会从大家的文章和讨论中汲取了一些营养,同时对一些阅读源码时的想法进行总结,出产一些文章,作为自己思考的总结,本人水平有限,欢迎留言讨论~ 目标Vue版本:2.5.17-beta.0 vue源码注释:https://github....

tumi 826

vue init download template_Vue原理解析(一):Vue到底是什么?

Vue,现在前端的当红炸子鸡,随着热度指数上升,实在是有必要从源码的角度,对它功能的实现原理一窥究竟。个人觉得看源码主要是看两样东西,从宏观上来说是它的设计思想和实现原理;微观上来说就是编程技巧,也就是俗称的骚操作。我们这次的侧重点是它的实现原理。好吧,让我们推开它那神秘的大门,进入Vue的世界~vue是什么?vue究竟是什么?为什么就能实现这么多酷炫的功能,不知道大家有没有思考过这个问题。其实在...

weixin_39633493的博客 154

Vue源码阅读:文件结构与运行机制

(点击上方公众号,可快速关注)作者:SHERlocked93https://juejin.im/post/5b38830de51d455888216675vue已是目前国...

前端大全 524

vue2学习一:核心特点,常用指令

数据驱动视图、组件化、虚拟 DOM、指令系统、轻量级易上手。

qq_69510169的博客 1058

router vue 动态改变url_2020年 vue常见面试问题总结(干货)!

1.什么是mvvm模式,谈谈你的理解? MVVM - Model View ViewModel,数据,视图,视图模型view 可以通过 事件绑定 的方式影响 model,model 可以通过 数据绑定 的形式影响到view,viewModel是把 model 和 view 连起来的桥梁,这样就实现了数据的双向绑定。2.vue构建初始化工程的步骤(vuecli3)?终端执行:1.npm inst...

weixin_30240263的博客 499

菜鸟教程 --- Vue3 教程

​Vue (读音 /vjuː/,类似于view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。................................................

freeking101的博客 9431

vue 获取url地址的参数_2020年 vue常见面试问题总结(干货)!

1.什么是mvvm模式,谈谈你的理解? MVVM - Model View ViewModel,数据,视图,视图模型view 可以通过 事件绑定 的方式影响 model,model 可以通过 数据绑定 的形式影响到view,viewModel是把 model 和 view 连起来的桥梁,这样就实现了数据的双向绑定。2.vue构建初始化工程的步骤(vuecli3)?终端执行:1.npm inst...

weixin_39560029的博客 943
上一篇: Vue源码系列4------Vue文件的入口-----Vue的初始化
下一篇: Vue源码系列6------Vue实例的挂载
Emily Qin
博客等级 码龄10年 118粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值