vue2概念

目录

1.单页面(spa)

2.虚拟dom

3.库、组件、插件、框架的区别? 

4.MVVM

5.数据代理 

6.v-model工作原理 (只能用在input里面)

7.vue实现双向数据绑定的原理

8.谈一谈对原生js开发和使用vue开发的看法

9.在vue组件中,data为什么是一个返回对象的函数

10.computed 与 watch的区别?

11.vue是什么

12.react、vue中的key有什么作用?(key的内部原理)

13.v-if 和 v-for 为什么不建议放在一起使用?

14. vue的响应式原理中 object.defineproperty有什么缺陷?

15.组件中 data,computed 和 watch 的区别


1.单页面(spa)

        只有一个主页面的应用,浏览器一开始要加载所有的html,js,css 所有的页面内容都包含在这个所谓的主页面中,但是在写的时候,还是会分开写(页面片段),然后在交互的时候由路由程序动态载入,单页面的页面跳转,仅刷新局部资源,多应用pc端.

        优点: 用户体验好,快

                内容的改变不需要加载整个页面,spa对服务器压力较小

                前后端分离

                页面效果会比较炫酷(比如切换页面内容时的转场动画)

        缺点:不利于seo

                导航不可用,如果一定要导航需要自行实现前进,后退(由于是单页面不能用浏览器的前进后退功能,所以需要自己建立堆栈管理)

                初次加载耗时多

                页面复杂度提高

        多页面(mpa)

                就是指一个应用中有多个页面,页面跳转就是整页刷新

2.虚拟dom

        虚拟dom就是js对象对真实dom的描述,它是真实dom的抽象,最终通过一系列操作映射到真实环境中.通俗的说就是js与dom之间的缓存,通过patch(diff)对比新旧虚拟dom并将它记录到一个对象中,最终创建真实的dom

        工作原理: 模板 ==> 渲染函数 ==> 虚拟dom ==>真实dom

       通过编译将模板转为渲染函数,执行渲染函数时会得到虚拟节点树,利用diff算法,比较两个新旧dom的差异,通过patch把差异返回给一个对象,最终搭建真实dom

3.库、组件、插件、框架的区别? 

           库  :Jquery  Zepto          提供项目常用方法,相当于工具包

           组件 :bootStarp  swiper         多个插件集合体,提供js,css,html  

           插件 :iScroll             把项目中的某一个功能进行封装

           框架 :angular  Vue  React uni-app  库+组件的集合体

4.MVVM

                全称是model-view-viewModel,是一种设计思想,核心是vm

                 M:   --model     --- 模型          -- 当前页面依赖的数据源

                 V:   --view      --- 视图          -- 当前页面的结构

                 VM:  --viewModel --- 视图模型  --vm对象

   

        工作原理:   

                model和view本质上并没有直接的联系,VM作为mvvm的核心,将model和view连接了起来,使model和view进行了交互

                当model数据源发生变化时,vm会监听到,vm对象会把数据源自动同步于view中

                当view发生变化时,vm也会监听到,vm对象会把变化之后的view同步于model之中

                model和view之间的工作是完全自动的,因此开发者只需要关注业务逻辑,不需要手动操作dom,复杂的状态完全由mvvm统一管理

5.数据代理 

        在Es6中:数据代理就是通过一个对象代理对另一个对象的操作

        在vue中:通过vm对象代理对data中属性的操作

        为什么使用

              可以更好地操作data中的属性

        代理对象原理  

              通过object.defineProperty把data对象的属性中添加到vm上,把添加的属性制定getter和setter,通过getter和setter可以对属性执行读与写的操作

6.v-model工作原理 (只能用在input里面)

        v-model本质是value + input方法的语法糖。

        可以通过model属性的prop和event属性来进行自定义。

        原生的v-model,会根据标签的不同生成不同的事件和属性

        text 和 textarea 元素使用 value 属性和 input 事件

        checkbox 和 radio 使用 checked 属性和 change 事件

        select 字段将 value 作为 prop 并将 change 作为事件

        可以将v-model进行如下改写:

                <input v-model="sth" />等同于<input :value="sth" @input="sth = $event.target.value" />

                这个语法糖必须是固定的,也就是说属性必须为value,方法名必须为:input

7.vue实现双向数据绑定的原理

        采用数据劫持结合发布者-订阅者模式的方式,通过object.defineproperty()来劫持各个属性的set,get,在数据变动时发布消息给订阅者,触发相应监听回调.当把一个普通javascript对象传给vue实例作为他的data选项时,vue将遍历它的属性,用object.defineproperty()将他们转为getter/setter.用户看不到getter/setter,但是在内部他们让vue追踪依赖,在属性被访问和修改时通知变化

8.谈一谈对原生js开发和使用vue开发的看法

                原生js:面向浏览器编程,需要写很多兼容性代码

                           操作dom更加繁琐,复杂交互需要频繁操作dom,且代码不够友好

                           可扩展性和可维护性没有保证

                            团队协作困难

                            开发效率低下

                vue优点:基于MVVM实现的数据驱动视图,解放了dom操作

                                view与model分离处理,降低代码耦合度

                vue缺点:双向绑定,bug调试难度增大

                                大型项目中,view和model过多,维护成本高

9.在vue组件中,data为什么是一个返回对象的函数

                如果data是对象,由于对象是引用类型,组件被复用时,就会创建多个实例.本质上,这些实例用的都是同一个构造函数.这样就会影响到所有的实例.所以为了保证组件不同的实例之间data不冲突,data必须是一个函数

10.computed 与 watch的区别?

           功能不同:

                       watch:侦听属性,侦听数据是否发生变化,执行对应的回调

                       computed:计算属性,依赖一个值计算另一个值,当数据发生变化时,使用该数据地方也会发生变化

           是否调用缓存:

                       computed:只有数据发生变化才会重新计算,否则从缓存中读取

                       watch:数据发生变化时,执行对应的回调,不会调用缓存

           是否调用return:

                       computed:必须要用return返回数据

                       watch:不是必须要用return

            首次加载是否监听:

                       watch:首次加载默认不做监听,如果需要,添加属性immediate:true

                       computed:首次加载默认做监听

           是否支持异步:

                       computed:不支持异步,内部有异步操作时失效,且无法监听数据变化

                       watch:支持异步

           使用场景:

                       computed:一个数据受多个数据影响

                       watch:一个数据影响多个数据

11.vue是什么

        vue是什么?vue的优势?vue的核心?vue的特性?vue的优缺点?vue的使用场景?

        概念:vue是一款用于构建用户界面的javascript框架.他基于html,css,javascript构建,并提供了一套声名式的,组件化的编程模型,帮助高效开发用户界面

        优势【特点】:

                   易用:有简单的html、 css、js基础便可

                   灵活:在库与框架之间自如伸缩

                   高效:文件小、便捷的虚拟dom、方便优化

        核心:数据驱动【mvvm】与 组件化

        特性:数据驱动视图【mvvm】和双向数据绑定【数据响应式】

        优点:

                      轻量级框架

                      渐进式框架

                      虚拟dom

                      组件化开发

                      数据响应式【双向数据绑定】

                      单页面路由

                      数据和视图的分离

        缺点:

                      单页面不利于seo优化

                      不支持ie8以下

                      首屏加载时间长

        vue的使用场景

                      单页面应用开发以及移动端

        对vue的理解
                Vue 是一套构建用户界面的渐进式的自底向上增量开发的 MVVM 框架,核心是关注视图层,vue 的核心是为了解决数据的绑定问题,为了开发大型单页面应用和组件化,所以 vue 的核心思想是数据驱动和组件化,这里也说一下 MVVM 思想,MVVM 思想是 模型 视图 vm 是 v 和 m 连
接的桥梁,当模型层数据修改时,VM 层会检测到,并通知视图层进行相应修改

12.react、vue中的key有什么作用?(key的内部原理)


      a. 虚拟DOM中key的作用:

                  key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较

                 

      b.对比规则:

               (1).旧虚拟DOM中找到了与新虚拟DOM相同的key:

                        ①.若虚拟DOM中内容没变, 直接使用之前的真实DOM!

                        ②.若虚拟DOM中内容变了, 则生成新的真实DOM,随后替换掉页面中之前的真实DOM。

               (2).旧虚拟DOM中未找到与新虚拟DOM相同的key

                        创建新的真实DOM,随后渲染到到页面。

                       

      c. 用index作为key可能会引发的问题:

                     1. 若对数据进行:逆序添加、逆序删除等破坏顺序操作:

                                 会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低。

                     2. 如果结构中还包含输入类的DOM:

                                 会产生错误DOM更新 ==> 界面有问题。

      d. 开发中如何选择key?:

                     1.最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值。

                     2.如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。
 

13.v-if 和 v-for 为什么不建议放在一起使用?

                Vue 2 中,v-for的优先级比v-if高,这意味着v-if将分别重复运行于每一个v-for循环中。如果要遍历的数组很大,而真正要展示的数据很少时,将造成很大的性能浪费。
                Vue 3 中,则完全相反,v-if的优先级高于v-for,所以v-if执行时,它调用的变量还不存在,会导致异常。

14. vue的响应式原理中 object.defineproperty有什么缺陷?


        Object.defineproperty()无法监控到数组下标的变化,导致通过数组下标添加元素Object.defineproperty()不能实时响应;


        Object.defineProperty .只能劫持对象的属性,从而需要对每个对象,每个属性进行遍历,如果,属性值是对象,还需要深度遍历。

        Proxy 可以劫持整个对象,并返回一个新的对象不仅可以代理对象,还可以代理数组。还可以代理动态增加的属性
 

15.组件中 data,computed 和 watch 的区别

        相同点:

                在 Vue 组件中,data、computed 和 watch 都是用来处理数据的

        不同点:
                data: 组件内部的数据源,可以用来存储和处理组件内部的数据。通过在组件中定义 data 属性来声明一个数据源。
                computed: 计算属性,用于计算和处理从 data 中获取的数据,提供一种简洁的方式来处理模板中的复杂逻辑。computed 属性具有缓存机制,只有在它的依赖项发生变化时才会重新计算。
                watch: 用于观察和响应数据的变化,当被观察的数据发生变化时,watch 中的回调函数会被调用。可以用 watch 来处理一些需要在数据变化时立即执行的操作,例如异步操作等。
                总的来说,data 用于存储组件内部的数据,computed 用于计算和处理需要从 data中获取的数据,而 watch 用于处理数据的变化,如果你需要在某个数据变化时做一些事情,使用 watch 来观察这个数据变化

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值