VUE2常用知识

news2025/1/15 19:33:02

1、Vue的基本原理

【】当一个Vue实例创建时,Vue会遍历data中的属性,用 Object.defineProperty(vue3.0使用proxy )将它们转为 getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。 每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。

2、双向绑定数据的原理

【】Vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。主要分为以下几个步骤:

  • 需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上setter和getter这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化
  • compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
  • Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是: ①在自身实例化时往属性订阅器(dep)里面添加自己 ②自身必须有一个update()方法 ③待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退
  • MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果

3、使用 Object.defineProperty() 来进行数据劫持有什么缺点

【】通过下标方式修改数组数据或者给对象新增属性,这都不能触发组件的重新渲染,因为 Object.defineProperty 不能拦截到这些操作

4、MVVM 理解

【】MVVM 分为 Model、View、ViewModel

  • Model 代表数据模型,数据和业务逻辑都在Model层中定义
  • View 代表UI视图,负责数据的展示
  • ViewModel 负责监听 Model 中数据的改变并且控制视图的更新,处理用户交互操作

5、Computed、Watch、Methods、Fliters

【】对于 Computed:

  • 支持缓存,只有依赖的数据发生了变化,才会重新计算
  • 不支持异步,当Computed中有异步操作时,无法监听数据的变化

【】对于 Watch:

  • 不支持缓存,数据变化时,它就会触发相应的操作
  • 支持异步监听

【】对于 Methods:

  • 同一函数可以定义为一个 method 或者一个计算属性,但是 method 不支持缓存,每次都会调用

【】对于 Fliters:

  • 对数据进行格式化。过滤器用在插值表达式 {{ }}v-bind 表达式 中,然后放在操作符“ | ”后面进行指示

6、slot是什么?有什么作用?原理是什么?

【】slot又名插槽,是Vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口

【】分为三类:默认插槽,具名插槽和作用域插槽

【】实现原理:当子组件 vm 实例化时,获取到父组件传入的 slot 标签的内容,存放在vm.$slot中,默认插槽为vm.$slot.default,具名插槽为vm.$slot.xxx,xxx 为插槽名,当组件执行渲染函数时候,遇到 slot 标签,使用 $slot 中的内容进行替换,此时可以为插槽传递数据,若存在数据,则可称该插槽为作用域插槽

7、常见的事件修饰符

【】.stop:等同于 JavaScript 中的 event.stopPropagation() ,防止事件冒泡

【】.prevent :等同于 JavaScript 中的 event.preventDefault() ,防止执行预设的行为

【】.capture :与事件冒泡的方向相反,事件捕获由外到内

【】.self :只会触发自己范围内的事件,不包含子元素

【】.once :只会触发一次

8、v-if 和 v-show 的区别

【】手段:v-if 是动态的向DOM树内添加或者删除DOM元素;v-show 是通过设置DOM元素的display样式属性控制显隐

【】编译过程:v-if 切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show 只是简单的基于css切换

【】编译条件:v-if 是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译; v-show 是在任何条件下,无论首次条件是否为真,都被编译,然后被缓存,而且DOM元素保留

9、data 为什么是一个函数而不是对象

【】首先当多个实例引用同一个对象时,只要一个实例对这个对象进行操作,其他实例中的数据也会发生变化

【】在Vue中,更多的是想要复用组件,那就需要每个组件都有自己的数据,这样组件之间才不会相互干扰。数据以函数返回值的形式定义,这样当每次复用组件的时候,就会返回一个新的data,也就是说每个组件都有自己的私有数据空间,它们各自维护自己的数据,不会干扰其他组件的正常运行

10、nextTick() 的作用

【】在数据变化后执行的某个操作,而这个操作需要使用随数据变化而变化的DOM结构的时候,这个操作就需要方法在nextTick()的回调函数中

【】在vue生命周期中,如果在created()钩子进行DOM操作,也一定要放在nextTick()的回调函数中。因为在created()钩子函数中,页面的DOM还未渲染,这时候也没办法操作DOM

11、自定义指令

【】一般需要对DOM元素进行底层操作时使用,尽量只用来操作 DOM展示,不修改内部的值。当使用自定义指令直接修改 value 值时绑定v-model的值也不会同步更新;如必须修改可以在自定义指令中使用keydown事件,在vue组件中使用 change事件,回调中修改vue数据

【】全局定义:Vue.directive("focus",{})。 局部定义:directives:{focus:{}}

【】钩子函数:bind inSerted update componentupdate unbind. 钩子函数参数:el. bing. name. value. oldValue. expression. arg. modifers. vnode. oldVnode

12、assets 和 static 的区别

【】assetsstatic 两个都是存放静态资源文件

【】在项目打包时,assets 中放置的静态资源文件会进行打包上传,static 中放置的静态资源文件就不会要走打包压缩格式化等流程

【】将项目中 template需要的样式文件js文件等都可以放置在 assets 中,走打包这一流程。减少体积。而项目中引入的第三方的资源文件如iconfoont.css 等文件可以放置在 static 中,因为这些引入的第三方文件已经经过处理,不再需要处理,直接上传

13、Vue 模版编译原理

【】解析阶段:使用大量的正则表达式对 template 字符串进行解析,将标签、指令、属性等转化为抽象语法树AST

【】优化阶段:遍历AST,找到其中的一些静态节点并进行标记,方便在页面重渲染的时候进行diff比较时,直接跳过这一些静态节点,优化runtime的性能

【】生成阶段:将最终的AST转化为render函数字符串

14、对 SSR 的理解

【】SSR也就是服务端渲染,也就是将Vue在客户端把标签渲染成HTML的工作放在服务端完成,然后再把html直接返回给客户端

【】优势:更好的SEO;首屏加载速度更快

【】缺点:服务器端渲染只支持beforeCreate和created两个钩子;更多的服务端负载

15、对 SPA 单页面的理解

【】SPA( single-page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转;取而代之的是利用路由机制实现 HTML 内容的变换,UI 与用户的交互,避免页面的重新加载

【】优点:

  • 用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染
  • 基于上面一点,SPA 相对对服务器压力小
  • 前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理

【】缺点:

  • 初次加载耗时多:为实现单页 Web 应用功能及显示效果,需要在加载页面的时候将 JavaScript、CSS 统一加载,部分页面按需加载
  • 前进后退路由管理:由于单页应用在一个页面中显示所有的内容,所以不能使用浏览器的前进后退功能,所有的页面切换需要自己建立堆栈管理
  • SEO 难度较大:由于所有的内容都在一个页面中动态替换显示,所以在 SEO 上其有着天然的弱势

16、Vue 子组件和父组件的执行顺序

【】加载渲染过程:父组件 beforeCreate. >. 父组件 created. >. 父组件 beforeMount. >. 子组件 beforeCreate. >. 子组件 created. >. 子组件 beforeMount. >. 子组件 mounted. >. 父组件 mounted

【】更新过程:父组件 beforeUpdate. >. 子组件 beforeUpdate. >. 子组件 updated. >. 父组件 updated

【】销魂过程:父组件 beforeDestroy. >. 子组件 beforeDestroy. >. 子组件 destroyed. >. 父组件 destoryed

17、组件通信方式

【】props / $emit

【】eventBus 事件总线

【】依赖注入(provide / inject):依赖注入所提供的属性是非响应式的

【】ref / $refs

【】$parent / $children

【】$attrs / $listeners

18、对虚拟 DOM 的理解

【】从本质上来说,Virtual Dom是一个JavaScript对象,通过对象的方式来表示DOM结构。将页面的状态抽象为JS对象的形式,配合不同的渲染工具,使跨平台渲染成为可能。通过事务处理机制,将多次DOM修改的结果一次性的更新到页面上,从而有效的减少页面渲染的次数,减少修改DOM的重绘重排次数,提高渲染性能

19、虚拟 DOM 的解析过程

【】首先对将要插入到文档中的 DOM 树结构进行分析,使用 js 对象将其表示出来,比如一个元素对象,包含 TagName、props 和 Children 这些属性。然后将这个 js 对象树给保存下来,最后再将 DOM 片段插入到文档中

【】当页面的状态发生改变,需要对页面的 DOM 的结构进行调整的时候,首先根据变更的状态,重新构建起一棵对象树,然后将这棵新的对象树和旧的对象树进行比较,记录下两棵树的的差异

【】最后将记录的有差异的地方应用到真正的 DOM 树中去,这样视图就更新了


参考文章:https://juejin.cn/post/6919373017218809864

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工时管理:按工作时间还是完成的任务来跟踪员工的生产力?

据中国社科院的一项调查显示:我国有86%的职场人都患有拖延症;50%的人不到最后一刻绝不开始工作;13%的人没有人催不能完成工作。 拖延症对小型或成长型企业的影响是很大的,毕竟,任务永远不会因为逃避或简单地坐在那里而…

【Linux】信号保存、信号处理、可重入函数、volatile关键字、SIGCHLD信号

目录 一、信号保存 1.1 信号相关的概念名词 1.2 在内核中的表示 1.3 sigset_t与操作函数 1.4 信号设定 二、信号处理 2.1 内核空间与用户空间 2.2 内核态和用户态 2.3 信号的捕捉流程 2.4 sigaction 函数 三、可重入函数 四、volatile 五、SIGCHLD信号 一、信号保…

当今主流的网络服务应用

文件传输协议 主机之间传输文件是IP网络的一个重要功能,如今人们可以方便地使用网页、邮箱进行文件传输。 然而在互联网早期,Web(World Wide Web,万维网)还未出现,操作系统使用命令行的时代,…

webpack前端应用之基础打包

目录 前言:初识 Webpack 5 一、前端工程化 1、webpack ​ (2)主要功能: 2、webpack的使用:配置文件所需要的信息(五大配置属性) 3、示例 强调: 4、webpack中使用的loader 二…

【Java基础】003 -- Java基础概念(计算机的存储规则)

目录 计算机的存储规则 1、什么是二进制? 2、为什么计算机要使用二进制存储数据? 3、进制之间可以转换吗? 4、码表(Text文本) 5、图片数据 6、声音数据 计算机的存储规则 在计算机中,任意的数据都是…

java集成RSA非对称加密数据传输

使用场景: 前端请求后端接口时如:登录接口,这时候需要传账号密码到后端接口请求这样就会暴露请求的数据。RSA非对称加密分公钥和私钥,公钥将数据进行加密,私钥对加密的数据进行解密 (当然前端最好是封装一下不要暴露出来公钥) 代码实现: 1、RSA工具类(或访问http:…

大数据舆情监控应用平台,TOOM大数据舆情监控系统的作用

大数据舆情监控应用是利用大数据技术对社会舆情的收集、分析、挖掘和展示的工具。它通常会收集和分析各种社交媒体、新闻媒体、博客等信息,以了解舆情动态和趋势。大数据舆情监控应用可以帮助企业和政府了解市场和社会动态,为决策提供支持。然而&#xf…

聚观早报 |比亚迪预计去年营收超4200亿元;美股三大指数集体收跌

今日要闻:比亚迪预计去年营收超 4200 亿元;美股三大指数集体收跌;王凤英正式加入小鹏汽车出任总裁;苹果计划在印度生产 25% 的 iPhone 手机;LVMH老板放狠话坚决打击代购行为比亚迪预计去年营收超 4200 亿元 1 月 30 日…

(Java高级教程)第四章必备前端基础知识-第三节3:JavaScript之DOM和BOM

文章目录一:WebAPI概述二:DOM(1)获取元素(2)事件(3)操作元素A:获取(修改)元素内容B:获取(修改)元素属性C&…

LeetCode 刷题系列 -- 108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums [-10,-3,0,5,9]输出&a…

粒子群优化(PSO)算法例题实现

目录 一、实验要求 二、算法流程 三、案例实现及结果 完整程序: 一、实验要求 二、算法流程 粒子群算法流程: 1、初始化:初始化粒子群;给每个粒子赋予初始位置和速度 2、计算适应值:根据适应度函数,计…

新范式+新标准=世界级产品|StarRocks年度总结

岁序常易,华章日新。虎年即将落幕,雄关漫道,我们携手社区斗志昂扬,并肩虎跃雄关。兔年新岁将至,黎明破晓,我们协力社区蓄势待发,昂首共赴新程。值此送虎迎兔的新春佳节之际,感恩与St…

电子技术——MOS放大器的DC偏置

电子技术——MOS放大器的DC偏置 正如前几节我们学习的,MOS放大器的小信号模型的参数取决于正确的DC偏置,这个步骤称为偏置设计。一个好的偏置设计要满足一个稳定的漏极DC电流 IDI_DID​ 和设置正确的 VDSV_{DS}VDS​ 保证MOS管在放大信号的时候处在饱和区…

Qt StyleSheet介绍

文章目录前言纠错技巧可以使用 , 号来同时指明多个同一类型控件的样式表qss注释前言 本文主要以这篇博客为基础。添加一些自己使用的心得和使用样式表的一些技巧 纠错 ID选择器这里类型选择器可以省略,因为每个控件的objectName是不一样的,所以无需指定…

高性能消息队列中间件MQ

毕业后工作半年,在自己的讲课中需要介绍消息队列,以前在大学也有经常接触message queen,但却还不够深入了解掌握,这次写个专门针对mq的文章理清头绪。 以下是学习mq的知识框架,我会不定时更新补充 RabbitMQ概念_MQ 消…

TwinCAT3串口通讯EL6021模块使用-和串口调试助手自由协议通讯

目录 一、简介 二、环境介绍 三、接线连接 四、创建TwinCAT3程序工程 1、IO扫描和参数设置 2、创建PLC程序 (1)库文件添加 (2)创建任务和程序 (3)变量关联 (4)重新激活工程、运…

adb的一些基本操作

adb的一些基本操作 Android使用的系统一般是debian系列操作系统,所以使用adb shell连接到手机后,可以使用大部分Debian系列的命令进行相关的操作 列出所有应用:adb shell pm list packages 列出第三方(系统)应用:adb shell pm li…

1611_PC汇编语言_math例程分析

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次分析后带有注释的代码我会在笔记最后做一个完整的附加。 这一个例程,主要是为了阐述前面讲到的数学运算。但是从这些操作中,很多底层…

介绍golang限流库以及漏桶与令牌桶的实现原理

RateLimit 限流中间件 前言 为什么需要限流中间件? 在大数据量高并发访问时,经常会出现服务或接口面对大量的请求而导致数据库崩溃的情况,甚至引发连锁反映导致整个系统崩溃。或者有人恶意攻击网站,大量的无用请求出现会导致缓…

Spark JDBC采用分区读取数据库时partitionColumn, lowerBound, upperBound, numPartitions参数理解

partitionColumn是应该用于确定分区的列。 lowerBound并upperBound确定要获取的值的范围。完整数据集将使用与以下查询对应的行: SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound numPartitions确定要创建的分区数。lowerBound和之间…