本文介绍: computed:是计算属性依赖其他属性值,并且computed的值有缓存,当依赖属性值发生改变时,才会重新计算computed的值,默认只读的(相当于getter函数),它也可以设置gettersetter函数完成读和写。(1)、造成数据混乱:如:一个父级组件数据传递多个组件,某个子组件如果通过Props修改组件数据,父级组件修改其他子组件,其他子组件就会莫名其妙的被修改,造成数据混乱。watch:属性变化的检测(相当于事件),当属性的值发生变化时,可以调用函数

一、对MVC,MVP,MVVM的理解

三者都是项目架构模式(不是类的设计模式),即:一个项目结构如何分层不同负责不同的职责。

1.MVC

MVC的出现是用在后端(全栈时代

M:model模型

主要完成业务功能,在数据库相关项目中,数据库增删改查属于模型没有页面,是纯粹的逻辑

V:view视图

主要负责数据显示(HTML+CSS,动态网页jsp,含有HTML的PHP文件))页面展示用户交互

C:controller控制器

主要负责每个业务核心流程,在项目中体现在路由以及中间件上(nodeJs中的routes文件夹

2.MVP

MVP是把MVC中的C改成了P。主要限制了M和V之间不能直接通信(互相调用传递数据)。M和V之间通信必须经过P。

P:Presenter,表示

主要用于连接M层、V层,完成Model层与View层的交互,还可以进行业务逻辑处理

3.MVVM:

MVVM是把MVP中的P改成了VM。主要体现的是M和V之间双向绑定。View的变动可以同步相应在Model,反之亦然。Vue就是一个MVVM的框架。准确来说,使用Vue框架完成项目时,使用的是MVVM模式

VM:ViewModel

主要完成M和V的数据通信,并且是双向绑定。而View和Model之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM,不需要关注数据状态同步问题复杂数据状态维护完全由MVVM来统一管理

总结:所有的MV*的项目架构模式:都是为了完成项目代码的职责分工。

二、vif和vshow区别

相同点:都是用来控制Dom元素显示隐藏

不同点:

1.原理上:

v-if是通过添加删除Dom元素,来控制Dom元素显示和隐藏。

v-show通过控制Dom元素样式display属性的值,来控制Dom元素显示和隐藏。

2.性能损耗

v-if:性能损耗主要体现在频繁切换

v-show:性能损耗主要体现在首次。

3.应用场景

v-if:用于切换不频繁的场景

v-show:用于切换频繁的场景

4.安全性
v-if:安全性好。(如果Dom元素不显示时,在Elements里根本看不到)

v-show:安全性不好。(如果Dom元素不显示时,在elements里依然可以看到,那么,懂程序的人,既可以修改)

三、computedwatch区别

1.相同点:

可以监听数据

2.不同点:

(1)概念

computed:是计算属性,依赖其他属性值,并且computed的值有缓存,当依赖的属性值发生改变时,才会重新计算computed的值,默认只读的(相当于getter函数),它也可以设置getter和setter函数完成读和写。

watch监听器,更多的是观察的作用,每当监听的数据变化时都会执行回调进行后续操作,它只能设置getter。watch默认只监听一层,如果要深度监听,让deep属性为true

(2)作用:

computed:为了显示而用,降低了模板代码复杂度

watch:属性变化的检测(相当于事件),当属性的值发生变化时,可以调用函数。主要处理异步以及开销比较大的操作简单粗暴的理解为:一个函数执行时机。

(3)依赖模板调用

computed:只能在模板使用

watch:不能在模板使用

(4)是否异步

computed:不能有异步,只能同步

watch可以异步

(5)立即执行:

computed:是立即执行。

watch:默认不是立即执行。如果要立即执行,增加属性:immediate。

补充:在写代码时,把函数定义和调用时机分开。

四、Vue2的响应原理

响应式:当js中的数据发生变化时,模板上会对应的发生变化。

1.数据劫持:

目的:当数据发生变化时,Vue框架感知到。

怎么做的:利用ES5的Object.defineProperty()。当实例化组件时,Vue框架内部会把定义在组件data里的所有数据(属性),进行遍历,给每个数据(属性)增加setter和getter函数(同时会做订阅)。当数据发生变化时,会调用setter函数。当获取数据时,会调用getter函数。

2.发布订阅者模式:

目的:当数据发生变化时(其实就是调用setter函数时),会发布给所有订阅者。

怎么做的:当Vue组件实例化时,Vue框架内部扫描模板,让模板上使用Vue语法指令,{{}}等)的Dom元素去订阅对应的数据的变化。然后,当数据变化时,会更新所有订阅该数据的模板。

五、Vue3的响应原理

1.数据劫持:用proxy替换了Object.defineProperty。Proxy需要循环速度比Object.defineProperty快10倍。同时也解决数组的劫持。(Vue2中用下标方式改变数组不是响应式的)

2.发布订阅者模式:

内部有个Track函数:相当于订阅

内部有个Trigger函数:相当于发布

六、双向绑定原理

1.双向绑定视图层发生变化时,模型层会变化。模型层变化时,视图层会变化。

2.原理:

(1)通过事件和属性完成

事件完成的:视图影响模型层。

属性完成的是:模型层影响视图层(背后就是响应式原理)

3.Vue针对官方标签使用v-model指令,v-model指令针对不同的官方标签使用不同事件和属性。

(1)、针对文本框单行多行):value属性和Input事件。如果加上修饰符lazy事件就变成了Change事件

(2)、针对radio:使用的checked属性和Change事件。同时,需要radio加上value属性。

(3)、针对checkbox:使用的checked属性和change事件

(3.1)、如果应用多选时,需要checkbox加上value属性。

(3.2)、如果应用单选时,不需要加。

(4)、针对select:使用value属性和change事件。

七、单项数据流

1.单项数据流什么

单项数据流是指父组件可以修改子组件的数据,反之不行(子组件不能修改父组件的数据)。

2.Vue框架的单项数据流:

Vue框架的Props是单项数据流。即:父组件可以修改子组件的Props。子组件不能通过修改Props的方式来修改父组件的数据(data),否则:

(1)、造成数据混乱:如:一个父级组件的数据传递多个子组件,某个子组件如果通过Props修改父组件的数据,父级组件再修改其他子组件,其他子组件就会莫名其妙的被修改,造成数据混乱。

(2)、框架会给程序员爆出一个警告(特指:父组件给子组件传递的Props来自父组件的数据)

3.当父级的数据更新时,子组件的Props也会随之更新

八、keepalive

keepalive是Vue提供的组件。

它有三个特征

(1)、组件作用:keepalive可以缓存组件及其状态(数据),避免了组件的频繁创建销毁所带来的性能损耗。一般结合路由动态组件一起使用。

(2)组件属性:提供includeexclude属性。include表示只有名称匹配的组件会被缓存exclude表示任何名称匹配的组件都不会被缓存,其中exclude优先级include高。两者都支持字符串正则表达式

(3)keepalive触发两个钩子函数:activated和deactivated,当组件被移除时,触发钩子函数deactivated。

九、SPA的理解

(1)单页面应用概念

SPA:single page application,单页面应用

就是整个项目只有一个HTML页面文件),首次加载时,把所有的HTML,cssjs全部加载下来。通过操作Dom的删除和创建添加)来完成页面的切换

(2)单页应用优缺点

优点:单页应用相对服务器压力小【因为:首次、或者只要HTML,cssjs加载完毕后,切换页面是不用再去服务器请求HTML,css和js,而是直接操作Dom】

2.局部刷新,所以,用户体验好。【通过删除,添加,修改Dom的方式

3.前后分离

4.页面效果比较炫酷比如切换页面内容时的转场动画

缺点:

不利于搜索引擎优化SEO(search engine optimization)。如:百度,360等搜索引擎搜索

2.初次加载时耗时多(可以使用路由懒加载解决)

3.导航不可用,如果一定要导航需要自行实现前进、后退(Vue-Router做好了)。页面复杂度提高很多。

4.容易造成css命名冲突【用scoped或者BEM的方式解决】

十、请问怎么理解虚拟Dom和Diff算法

1.什么虚拟Dom和Diff算法

虚拟Dom:用JS对象模拟的真实Dom,该JS对象包含了真实Dom的所有属性和内容

Diff算法用来比较两个虚拟Dom的不同之处,并在旧的虚拟Dom树上打上标记

2.虚拟Dom和Diff算法的作用:

虚拟Dom和Diff算法结合起来,用来提升性能。可以减少无效的Dom渲染,即:减少了无效的重排和重绘

3.步骤思路流程

(1)产生两个虚拟Dom树:newVDom,oldVDom

(2)oldVDom和真实Dom树保持一致

(3)数据变化时,影响的是newDom

(4)操作newVDom后,通过Diff算法对比newVDom和oldVDom的差异

原文地址:https://blog.csdn.net/mez_Blog/article/details/134756423

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_32946.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注