Vue 双向绑定、diff和nextTick原理

面试复习题--Vue面试 标准答案Vue 的生命周期,指的是Vue 组件从「创建 → 挂载 → 更新 → 销毁」的整个过程,在这个过程中,Vue 会在不同的阶段自动调用对应的「生命周期钩子函数」,开发者可以在钩子函数中编写对应阶段的业务逻辑,无需手动调用。必背核心(100% 考):Vue2 响应式原理 + 缺陷、Vue3 响应式原理 + 优势、v-model 双向绑定原理、computed 和 watch 的区别;高频考点(80% 考):虚拟 DOM+diff 算法、key 的作用、单向数据流、nextTick 原理; 阅读详情
  1. 前言

    1. 什么是虚拟dom

      1. virtual DOM 虚拟DOM,用普通js对象来描述DOM结构,因为不是真实DOM,所以称之为虚拟DOM。
        虚拟 dom 是相对于浏览器所渲染出来的真实 dom而言的,在react,vue等技术出现之前,我们要改变页面展示的内容只能通过遍历查询 dom 树的方式找到需要修改的 dom 然后修改样式行为或者结构,来达到更新 ui 的目的。
        这种方式相当消耗计算资源,因为每次查询 dom 几乎都需要遍历整颗 dom 树,如果建立一个与 dom 树对应的虚拟 dom 对象( js 对象),以对象嵌套的方式来表示 dom 树及其层级结构,那么每次 dom 的更改就变成了对 js 对象的属性的增删改查,这样一来查找 js 对象的属性变化要比查询 dom 树的性能开销小。
    2. 为什么需要虚拟dom

      1. 在vue中,渲染视图会调用render函数,这种渲染不仅发生在组件创建时,同时发生在视图依赖的数据更新时。如果在渲染时,直接使用真实DOM,由于真实DOM的创建、更新、插入等操作会带来大量的性能损耗,从而就会极大的降低渲染效率。因此,vue在渲染时,使用虚拟dom来替代真实dom,主要为解决渲染效率的问题。
    3. 虚拟dom是如何转化为真实dom

      1. 在一个组件实例首次被渲染时,它先生成虚拟dom树,然后根据虚拟dom树创建真实dom,并把真实dom挂载到页面中合适的位置,此时,每个虚拟dom便会对应一个真实的dom。
        如果一个组件受响应式数据变化的影响,需要重新渲染时,它仍然会重新调用render函数,创建出一个新的虚拟dom树,用新树和旧树对比,通过对比,vue会找到最小更新量,然后更新必要的虚拟dom节点,最后,这些更新过的虚拟节点,会去修改它们对应的真实dom这样一来,就保证了对真实dom达到最小的改动。
  2. 双向绑定原理

    1. 简介

      1. 响应式数据的最终目标,是当对象本身或者对象属性发生变化时,将会运行一些函数,最常见的就是render函数,在具体实现上,vue使用了几个核心部件
        1. Observer

          1. Observer要实现的目标非常简单,就是把一个普通的对象转换为响应式的对象。为了实现这一点,Observer把对象的每个属性通过`0bject.defineProperty转换为带有gtter和setter 的属性,这样一来,当访问或设置属性时,vue就有机会做一些别的事情。Observer是vue内部的构造器,我们可以通过Vue提供的静态方法vue.observable(object)间接的使用该功能在组件生命周期中,这件事发生在beforecreate之后,created之前。具体实现上,它会递归遍历对象的所有属性,以完成深度的属性转换。由于遍历时只能遍历到对象的当前属性,因此无法监测到将来动态增加或删除的属性,因此vue 提供了$set 和$delete两个实例方法,让开发者通过这两个实例方法对已有响应式对象添加或删除属性。对于数组,vue 会更改它的隐式原型,之所以这样做,是因为vue需要监听那些可能改变数组内容的方法。总之,Observer的目标,就是要让一个对象,它属性的读取、赋值,内部数组的变化都要能够被vue感知到。
        2. Dep

          1. 这里有两个问题没解决,就是读取属性时要做什么事,而属性变化时要做什么事,这个问题需要依靠Dep来解决。
            Dep的含义是Dependency,表示依赖的意思。vue 会为响应式对象中的每个属性、对象本身、数组本身创建一个Dep 实例,每个Dep 实例都有能力做以下两件事:
            记录依赖:是谁在用我
            派发更新:我变了,我要通知那些用到我的人
            当读取响应式对象的某个属性时,它会进行依赖收集:有人用到了我当改变某个属性时,它会派发更新:那些用我的人听好了,我变了
        3. Watcher

          1. 这里又出现一个问题,就是Dep如何知道是谁在用我?要解决这个问题,需要依靠另一个东西,就是Watcher。当某个函数执行的过程中,用到了响应式数据,响应式数据是无法知道是哪个函数在用自己的因此,vue通过一种巧妙的办法来解决这个问题我们不要直接执行函数,而是把函数交给一个叫做watcher的东西去执行,watcher是一个对象,每个这样的函数执行时都应该创建一个watcher,通过watcher去执行。
            watcher会设置一个全局变量,让全局变量记录当前负责执行的watcher等于自己,然后再去执行函数,在函数的执行过程中,如果发生了依赖记录dep.depend(),那么Dep就会把这个全局变量记录下来,表示:有一个watche用到了我这个属性。当Dep进行派发更新时,它会通知之前记录的所有watcher:我变了。
        4. Scheduler

          1. 现在还剩下最后一个问题,就是Dep通知watcher之后,如果watcher执行重运行对应的函数,就有可能导致函数频繁运行,从而导致效率低下试想,如果一个交给watcher的函数,它里面用到了属性a、b、c、d,那么a、b、c、d属性都会记录依赖,于是下面的代码将触发4次更新:
            1. state.a = "new data";
              state.b = "new data";
              state.c = "new data”;
              state.d = "new data";
              这样显然是不合适的,因此,watcher收到派发更新的通知后,实际上不是立即执行对应函数,而是把自己交给个叫调度器的东西。
              调度器维护一个执行队列,该队列同一个watcher仅会存在一次,队列中的watcher不是立即执行,它会通过一个叫做nextTick的工具方法,把这些需要执行的watcher放入到事件循环的微队列中,nextTick的具体做法是通过Promise 完成的。nextTick 通过 this.$nextTick 暴露给开发者
              nextTick 的具体处理方式见:https://cn,yuejs.org2/guide/reactivity,html#%E5%BC%82%E6%AD%A5%E6%9B%B4%E6%96%B0%E9%98%9F%E5%88%97
              也就是说,当响应式数据变化时,render函数的执行是异步的,并且在微队列中。
        5. 总体流程

          1. 首先原始对象交给Obsever,它会把它变成一个响应式对象,它具有getter和setter,假如有一个函数render要执行,他不是立即执行,而是把自己交给watcher,watcher会设置一个全局变量,然后运行这个函数,执行的过程中会用到响应式变量,然后属性就被收集过来了,这个过程叫做依赖收集,记录一个属性用到了这个watcher另外一个属性也用到了watcher,还有一些对象、数组用到watcher,这些都会记录,然后页面会渲染出来,当我们通过点击按钮等操作setter会做派发更新,之前有watcher用到了这个属性,然后通知watcher数据发生改变,之后watcher不是立即执行这个函数,不然的话会执行好多次,因为有可能很多数据都要不停的变化,它把自己交给一个调度器,这个调度器已经存在很多watcher,调度器的作用就是把这些watcher添加到队列中去,然后队列把执行自己的函数交给nextTick,nextTick中也会存在其它函数都是在微队列中,通过promise.then。因此等待同步代码完成以后,会异步的执行nextTick中的函数,当执行到watcher时又运行render函数,又用到响应式数据然后重新收集依赖,之前的依赖来会取消掉,循环往复。
  3. diff算法

    1. 参考回复

      1. 当组件创建和更新时,vue均会执行内部的update函数,该函数在内部调用render函数生成虚拟dom树,组件会指向新树,然后vue将新旧两树进行对比,找到差异点,最终更新到真实dom。
      2. 对比差异的过程叫diff,vue在内部通过一个叫patch的函数完成该过程。
      3. 在对比时,vue采用深度优先、逐层比较的方式进行比对。
      4. 在判断两个节点是否相同时,vue是通过虚拟节点的key和tag来进行判断。
      5. 具体来说,首先对根节点进行对比,如果相同则将旧节点关联的真实dom的引用挂到新节点上,然后根据需要更新属性到真实dom,然后再对比其子节点数组;如果不相同,则按照新节点的信息递归创建所有真实dom,同时挂到对应虚拟节点上,然后移除掉旧的dom。
      6. 在对比其子节点数组时,vue对每个子节点数组使用了两个指针,分别指向头尾,然后不断向中间靠拢来进对比,这样做的目的是尽量复用真实dom,尽量少的销毁和创建真实dom。如果发现相同,则进入和根节点一样的对比流程,如果发现不同,则移动真实dom到合适的位置。
      7. 这样一直递归的遍历下去,直到整棵树完成对比。
    2. diff的时机

    3. 当组件创建时,以及依赖的属性或数据变化时,会运行一个函数,该函数会做两件事:运行_render生成一棵新的虚拟dom树(vnode tree)。运行_update,传入虚拟dom树的根节点,对新旧两棵树进行对比,最终完成对真实dom的更新。
      核心代码如下:
      // vue构造函数
      function Vue()
      //..,其他代码
      var updateComponent=()=>{
      this._update(this._render()
      }
      new Watcher(updatecomponent);
      //..其他代码
      diff就发生在_update 函数的运行过程中
    4. _update 函数在干什么

      1. _update 函数接收到一个 vnode 参数,这就是新生成的虚拟dom树。
      2. 同时,_update函数通过当前组件的_vnode属性,拿到旧的虚拟dom树。
      3. _update函数首先会给组件的_vnode属性重新赋值,让它指向新树。
      4. 然后会判断旧树是否存在:
        1. 不存在:说明这是第一次加载组件,于是通过内部的patch函数,直接遍历新树,为每个节点生成真实DOM,挂载到每个节点的elm属性上。
        2. 存在:说明之前已经渲染过该组件,于是通过内部的patch函数,对新旧两棵树进行对比,以达到下面2个目标:
          1. 完成对所有真实dom的最小化处理
          2. 让新树的节点对应合适的真实dom
      5. patch函数的对比流程

        1. 「相同」:是指两个虚拟节点的标签类型、key值均相同,但input 元素还要看 type 属性。
        2. 「新建元素」:是指根据一个虚拟节点提供的信息,创建一个真实dom元素,同时挂载到虚拟节点的elm属性上。
        3. 「销毁元素」:是指:vnode.elm.remove()
        4. 「更新」:是指对两个虚拟节点进行对比更新,它仅发生在两个虚拟节点「相同」的情况下。具体过程稍后描述
        5. 「对比子节点」:是指对两个虚拟节点的子节点进行对比,具体过程稍后描述详细流程:
  4. nextTick

    1. 是什么

      1. nextTick是等待下一次 DOM 更新刷新的工具方法。
    2. 原理

      1. 在Vue内部,nextTick之所以能够让我们看到DOM更新后的结果,是因为我们传入的callback会被添加到队列刷新函数(flushSchedulerQueue)的后面,这样等队列内部的更新函数都执行完毕,所有dom操作也就结束了,callback自然能够获取到最新的DOM值。
Vue实例核心属性与模板渲染机制全解析:从data、computed到响应式原理 在现代前端开发中,响应式数据绑定是构建动态用户界面的核心技术。其原理在于通过数据劫持(如Object.defineProperty或Proxy)自动追踪依赖,当数据变化时,系统能高效地更新视图。这项技术的核心价值在于实现了声明式编程,开发者只需关注状态与视图的映射关系,极大提升了开发效率和代码可维护性。在Vue.js框架中,这一理念通过Vue实例的核心属性得以完美实践。例如,`data`属性定义了响应式数据的原始仓库,而`computed`属性则基于依赖缓存派生状态,两者共同构成了数据驱动的基石。这些属性与 阅读详情

相关推荐

以ATT&CK为例构建网络安全知识图

随着攻击工具、方法的逐渐升级和复杂化,安全数据的大规模融合,攻防对抗愈加激烈。安全团队如何在浩瀚数据中有效发现高级威胁的蛛丝马迹,如何把网络安全专家的经验、知识有效转化为可复制可扩展的数据分析能力,如何将对抗高级威胁的“炼金术”逐步升级为科学淘金指南,如何将安全从业者从繁重的体力劳动中解放出来,愈发成为安全能力亟需突破的难点和重点,也是我们正在探索的方向。正如医疗行业中治疗疑难杂症依赖医疗专家,网络空间高级威胁的防护和处置也依赖安全专家的经验与知识。

2401_88752684的博客 1085

Vue之diff算法

前言 Vue通过双向绑定来实现数据驱动视图更新,当数据更新会触发Dep对象notify通知所有的订阅者Watcher对象,Watcher对象最后会调用run来执行Watcher对象的getter方法。 其中需要注意的是在挂载阶段创建的一个Watcher对象的getter就是用于updateComponent,其中最主要方法就是调用Vue.prototype._update,而该实例方法主要进行调用patch函数进行节点的diff比较。 patch函数逻辑 通过阅读Vue源码可知,patch函数的逻辑实际上主

玉案轩窗的博客 1632

Zotero插件安装保姆级教程:从Jasminum到Sci-Hub,一站式搞定文献管理

本文提供Zotero插件安装的保姆级教程,从Jasminum到Sci-Hub,一站式搞定文献管理。通过详细配置和实战案例,帮助用户高效构建文献工作流,提升研究效率。重点介绍了元数据抓取、PDF管理、文献分析和知识产出等关键插件的使用方法。

weixin_42531516的博客 166

「Vue系列」之Vue2的数据劫持、发布订阅者模式、diff算法

Vue双向绑定(数据劫持,发布订阅者模式,diff算法) 最近一段时间自己找点东西学习,因为面试vue双向绑定问的挺多的,就想去深入研究一下本质原理,说是本质也不算,就是看了看别人的研究总结一点自己的看法和理解。 数据劫持 首先想实现双向绑定,肯定要先知道数据的变化,这时候应该怎么做?就是使用一个方法进行数据劫持。这个方法就是Object.defineProperty()。 介绍一下这个方法: O...

码农的博客 2866

STM32F407+LAN8720网口不通?别慌,手把手教你用CubeMX和HAL库搞定RMII配置与调试

本文详细介绍了STM32F407与LAN8720网口不通的全面排查与解决方法,涵盖硬件检查、CubeMX配置、PHY芯片初始化和LWIP协议栈优化。通过RMII接口配置、时钟树设置和PHY芯片调试,帮助开发者快速定位并解决网络连接问题,提升嵌入式网络开发效率。

weixin_30457551的博客 504

联想Y9000P安装Ubuntu20.04记录

联想Y9000P 2022安装Ubuntu20.04问题记录

Legendyyy的博客 7102

vue双向数据绑定、虚拟Dom、diff算法、组件通信

双向绑定的原理?数据劫持? mvvm 双向绑定,采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的 setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 几个要点:1、实现一个数据监听器 Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者2、实现一个指令解析器 Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数3、实现一个 ...

m0_56722063的博客 716

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

简述 Vue的双向数据绑定( MVVM 实现了什么,以及其diff算法所运行的位置 )。

MVVM 实现了什么。 View(dom)

qq_40146880的博客 528

C#串口通信从入门到精通(7)——整数/浮点数与二进制、八进制、十六进制之间的转换与C#实现

本文详细介绍由博主开发的DataConvert串口通信帮助类的用法,该帮助类涵盖了串口通信领域所有的数据转换方法,帮助大家快速编写串口通信程序!

qq_34059233的博客 2867

新能源汽车动力总成研发测试技术全景深度报告(2025版)

本文所有企业案例数据均来自上市公司财报、工信部备案信息及权威媒体报道,技术参数经第三方检测报告交叉验证。研发测试人员能力矩阵重构(T型人才进阶路径)[10] 全球动力总成市场2035年预测报告。[9] NI电动汽车HIL测试架构技术文档。[3] 东风汽车智能化研发体系深度报告。[5] 混合动力测功机发明专利技术细节。[1] 领克动力总成试验中心技术解析。[7] 新能源汽车产业迭代趋势白皮书。测试架构师-数字工程。测试架构师-安全合规。测试架构师-人工智能。

CSDN-新能源汽车研发测试专业博主 769

前端面试八股文 Vue

如果data不是一个函数,或者函数中不是返回一个对象字面量,那么实例化多个组件的话,不同组件间会共享同一个data,data的改变也会影响到每个实例,这是不符合预期的。

213

OTA 升级失败/回滚策略设计:打造安全可靠的双分区/断点续传/签名校验方案

双分区机制(A/B Partitioning)是OTA升级的“保险箱”。简单来说,设备存储分为两个分区:A分区(当前运行)和B分区(备用)。升级时,新固件写入B分区,A分区保持不变。如果升级成功,系统切换到B分区运行;如果失败,设备直接回滚到A分区,完全不受影响。这就像玩游戏存档:你打Boss前存了个档,万一挂了还能读档重来。双分区就是设备的“读档”机制,避免了变砖的尴尬。以Android设备为例,Google从Android 7.0开始强制引入A/B分区机制(Seamless Updates)。

大模型大数据攻城狮的专栏 1217

前端八股文之Vue

1. Vue的响应式原理 数据驱动视图,UI =render(state),state状态发生变化,vue经过模板编译,虚拟DOM,patch过程更新视图。vue2.x会使用object.defineProperty重新当以data中的所有属性,当页面使用对应属性,首先进行数据收集,如果是属性变化会通知相关依赖进行更新操作。vue3.x改用proxy替换object.defineproperty,因为Proxy可以直接监听对象和数组的变化。 1. Vue的双向绑定 双向绑定是通过数据劫持结合发布者-.

weixin_43405946的博客 7424

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

2024年从源码层面解读16道Vue常考面试题(1),2024年最新面试一路绿灯Offer拿到手软

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。前端面试题汇总if (value!

2401_84617821的博客 369

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2021Vue.js面试题汇总及答案【全网最全 建议收藏】

文章目录前言一、Vue.js基本问题1.1.Vue 响应式原理1.2.Vue.js 的特点1.3. Vue.js 双向绑定的原理1.4.Vue中如何监控某个属性值的变化?1.5.Vue.js 3.0 放弃defineProperty, 使用Proxy的原因1.6.Vue 2 中给 data 中的对象属性添加一个新的属性时会发生什么?如何解决? 前言 之前博主有分享过Vue学习由浅到深的文章(Vue学习之从入门到神经) 现在Vue学的好的话马内真的不必后端差 所以今天博主就汇总下有关Vue的相关面试题

白大锅的博客,毕设WangLoveBai_999 12万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Vue 3 常见面试题汇总_vue3面试题

虚拟 DOM(Virtual DOM)就是将真实 DOM 的主要数据抽取出来,并以对象的形式表达,用于优化 DOM 操作。虚拟 DOM 的主要目的是提高性能和减少实际 DOM 操作的次数,从而改善用户界面的渲染速度和响应性。

2401_89192069的博客 977

2020最全前端面试系列(VUE)(初学者快速上手的前端框架)

Model代表,也可以在Model中定义数据修改和操作的业务逻辑。View代表,它负责将数据模型转化成UI 展现出来。ViewModel,简单理解就是一个同步View 和 Model的对象,连接Model和View。ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

2401_89737660的博客 1005

Vue面试题

1、介绍一下MVVM,和MVC有什么区别 MVVM是Model-View-ViewModel缩写,也就是把MVC中的Controller演变成ViewModel。Model层代表数据模型,View代表UI组件,ViewModel是View和Model层的桥梁,数据会绑定到viewModel层并自动将数据渲染到页面中,视图变化的时候会通知viewModel层更新数据。 MVC: MVC是Model-View- Controller的简写。即模型-视图-控制器。M和V指的意思和MVVM中的M和V意思一样。C即.

qq_37708342的博客 769

最新的Vue面试题大全含源码级回答,吊打面试官系列

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

2401_84418883的博客 1103

Vue高频面试题v1

web1.0 年代是前端和后端不分离的。而且那个时候是没有前端这个岗位的。这样的项目缺点:1、前端和后端代码全在一起不好维护(对于中大型来说)2、一个人开发一整个项目,进度人员把控,开发者专业度都不够。3、后端是有MVCweb2.0 年代ajax出来,就有前端和后端分离的项目了这样的项目解决了web1.0的一些问题:1、比1.0那个年代好维护2、前端是前端,后端是后端,分开人员这样的项目缺点:1、中大项目还是不太好维护。

qq_25327339的博客 188

VUE框架设计核心定位 - MVVM

Model 需具备变更通知能力(如 Vue 的响应式数据劫持),VM 才能精准捕获变化。ViewModel核心实现手段:响应式系统 + 模版编译 + 渲染与DIFF。beforeDestory:实例被销毁前(获取实例的绑定数据进行全局更新)插值表达式底层编译时,会触发对应响应式数据的读取,从而将数据整体。核心机制:双向绑定(通过数据绑定与事件转发实现)// 等待 DOM 更新,返回 promise。// 或者 async/await 写法。// 打印:更新后内容。// 打印:初始内容。

CC_77123的博客 333

每天10个vue面试题(十一)

一天10个vue面试题喽!

不熬夜的臭宝的博客 507

最新Vue 3 常见面试题汇总_vue3面试题(1),不了解这些多线程的基础知识很难学懂前端

为了帮助大家更好温习重点知识、更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。},},})myCat.name // expected output: 我被读取了:name。

2301_82244509的博客 361

前端面试100问系列 | 第6章:Vue 核心原理考点

自定义指令用于对 DOM 元素进行底层操作(如v-focusVue2 vs Vue3 指令生命周期Vue2 钩子Vue3 钩子执行时机bind指令首次绑定到元素时insertedmounted元素插入父节点时updateupdated(移除)组件 VNode 更新时updated组件 VNode 及其子节点更新后unbind指令与元素解绑时Vue3 重大变化钩子函数更名(更接近组件生命周期)。移除update钩子,合并到updated。取代bindmounted取代inserted。

qq_39147931的博客 341

VUE2常见面试题

本文摘要: Vue相关技术核心概念解析 MVVM与MVC架构区别 MVC单向数据流,视图与控制器耦合 MVVM双向绑定,数据自动同步,解耦视图与模型 Vue核心特性 生命周期钩子函数执行顺序(8个阶段) 数据双向绑定原理(Object.defineProperty+发布订阅) 组件通信机制(父子props/emit、跨级provide/inject等) 虚拟DOM与diff算法优化渲染 计算属性与侦听器区别(缓存机制) 状态管理 Vuex工作流程(state/mutations/actions/getter

2301_76805327的博客 462
上一篇: 16.手写JavaScript Promise.race
下一篇: webpack面试题(持续汇总ing。。。)
_xiyang
博客等级 码龄8年 1253粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值