VUE相关整理

VUE相关

VUE基础知识

1.MVVM

MVVM是Model-View-ViewModel缩写,就是把MVC中的Controller演变成ViewMode。Model层代表数据模型,View代表UI组件,ViewModel是View和Model层的桥梁,数据会绑定到viewModel层并自动将数据渲染到页面中,视图变化的时候会通知viewModel层更新数据。

2.响应式数据的原理

  • 核心点:Object.defineProperty
  • 默认Vue在初适化数据 时,会给data中的属性使用Object.defineProperty重新定义多有属性,当页面取到对应属性时,会进行依赖收集(收集当前组件的watcher)如果属性会发生变化会通知相关依赖进行更新操作(发布订阅者).

3.v-show与v-if的区别

实现本质:

  • v-show:通过display:none和diaplay:block之间切换
  • v-if:通过DOM节点插入,删除来实现切换

性能对比:

  • v-if:切换时需要删除,插入节点开销大,如果不频繁切换,渲染用v-if,若初次渲染值为false不会插入节点渲染会节约性能.
  • v-show:初始渲染开销大,就算是false时,也会渲染,但是在切换时只是改变延时,消耗少,在频繁切换时用v-show

4.方法调用 computed watch区别

方法:页面数据每次重新渲染都回重新执行,性能消耗大,

computed:是计算属性,依赖其他属性的计算值,并且computed的值有缓存,只有当计算值变化才会返回内容

watch:监听到值的变化就会执行回调,在回调中可以进行一些逻辑操作(异步请求的时候要用到watch)

总结:

一般不用方法

一般来说需要依赖的属性来动态偶去值的时候可以使用computed

对于监听到值的变化需要做一步操作或开销较大操作时用watch

想到购物车中的使用

5.生命周期 钩子函数

  • beforeCreate 该钩子是new Vue()之后出发的第一个钩子,在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问
  • created 该钩子是实例创建完成后发生的,当前阶段已经完成数据观测,也可以使用数据,更改数据,在这里更改数据不会触发updated函数。可以做初始化数据的获取,在当前阶段无法对DOM进行交互
  • beforeMount 发生在挂载之前,在这之前template模板导入渲染函数编译,当前阶段的DOM已经创建完成,即将开始渲染此时可以对数据进行更改,不会触发upddated
  • mounted 在挂载完成后发生,在当前阶段,真实的DOM挂载完毕,数据完成 双向绑定,可以访问DOM节点,使用$refs属性对DOM进行操作
  • beforeUpdate发生在更新之前,也就是响应式数据发生更新,虚拟DOM重新渲染之前触发,这个阶段进行数据更改,不会造成重新渲染
  • updated 发生在更新完成之后,当前阶段的组件DOM更新完成,在此期间更改数据,可能导致无线循环的更新
  • beforeDestory 发生的实例销毁之前,当前阶段实例完全可以被使用,进行收尾工作,比如清理定时器
  • destoryed 发生在实例销毁之后,dom就是一个空壳,组件已经被拆散,数据绑定为卸载,监听被移出,子实例也被销毁

6.nextTick实现原理

在下次DOM更新循环结束之后执行延迟回调。

7.组件中data为啥是函数

一个组件被多次复用的话,也就会创建多个实例。本质上,这些实例用的是同一个钩子函数。如果data是对象的话,对象属于引用类型,会影响到所有的实例,所以为了保证组件组件不同的实例之间不冲突,data必须是一个函数

8.keep-alive

keep-alive可以实现组件缓存,当组件切换时不会对当前组价进行卸载

常用的的两个属性include/exclude,允许组件有条件的进行缓存

两个生命周期actived、dectivated,用来得知当前组件是否处于活跃状态。

keep-alive的中还运用了LRU算法

9.v-if与v-for为啥不能连用

优先级问题 v-for比v-if优先执行,是否v-if的值是否为true,他遍历,一般将用v-if嵌套v-for使用

不想要v-if的div包裹,可以用template标签

造成不不要的性能浪费

10.父子组件通信的方式

(1) Props+$emit

(2)回调函数(callback)

(3) p a r e n t + parent+ parent+children

(4)provide+inject

11.vue中组件生命周期额调用顺序

组件调用的顺序是先父后子,渲染完成的顺序是先子后父

组件的销毁操作是先父后子,销毁完成的顺序是先子后父

加载渲染过程

父beforcreate > 父created >父 beforeMount >子beforeCreate >子 created >子beforemounted >子mounted >父mounted

子组件更新过程

父beforeUpdate > 子beforeUpdate >子 updated >父updayed

销毁过程

父beforeDestory>子beforeDestory >子destoryed>父 destoryed

12. Vue中性能的优化

  • 减少data中的数据,data中数据都会增加getter和setter,会手机对应的watcher
  • v-if和v-for不能连用(v-for优先级比v-if的高,会优先先执行,占内存)
  • SPA页面采用keep-alive缓存组件
  • 防抖、节流
  • 图片懒加载
  • 长列表滚动到可视区域动态加载
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值