Vue

43 阅读3分钟

一、关于框架

1. 基于MVVM的框架(model层负责业务逻辑和服务端交互,view负责展示,vm是通信桥梁)

2. 组件化的(解耦方便替换 可维护,统一升级 )

3. 基于虚拟DOM算法的(只操作数据)

4. 指令系统(条件渲染 列表渲染 属性绑定 事件绑定 双向数据绑定)

5. 和react区别

  • 数据流向的不同。react从诞生开始就推崇单向数据流,而Vue是双向数据流
  • 数据变化的实现原理不同。react使用的是不可变数据,而Vue使用的是可变的数据
  • 组件化通信的不同。react中我们通过使用回调函数来进行通信的,而Vue中子组件向父组件传递消息有两种方式:事件和回调函数
  • diff算法不同。react主要使用diff队列保存需要更新哪些DOM,得到patch树,再统一操作批量更新DOM。Vue 使用双向指针,边对比,边更新DOM

二、单页面应用

有一个主页面和多个页面片段组成,页面渲染的时候,主页面不变,只更新、替换页面片段,避免页面之间的切换和代码的重新加载。

SPA和MPA的区别:

  • 组成

  • 切换速度

  • 搜索引擎优化

  • 页面间数据传递

  • URL模式

  • 刷新模式

三、v-if 与 v-show

  • 显示时均占据位置,不显示时均不占据位置

  • 隐藏的原理: 一个使用css隐藏display:none, 另一个直接删除dom元素

  • 编译过程:一个涉及元素销毁,另一个涉及元素的销毁与重建(触发生命周期钩子函数)

  • v-if涉及dom操作,开销更大,适合操作不频繁的场景

四、生命周期

  • beforeCreated  实例初始化

  • created  实例已创建,已经可以拿到数据,多用于调用接口

  • beforeMounted 

  • mounted 组件挂载到实例,可以获取到DOM元素,用于做一些Dom操作

  • beforeUpdate 数据发生变化,组件更新之前

  • updated 组件更新之后

  • beforeDestroy 组件销毁前 清除订阅或定时器

  • Destroyed 组件销毁后

  • actived 缓存的组件激活时

  • deactived 缓存的组件停用时

  • errorCaptured 捕获子组件错误时

五、v-if 和 v-for

v-for 优先级高于 v-if,每次会先循环再判断,浪费计算资源

六、data属性是一个函数

根实例的data属性可以是对象,因为他是一个单例,不会产生数据污染

组件实例的data必须是函数,实例化是通过Vue.extend创建的,(组件复用)构造出的组件会共用同一片内存地址,使用函数可以返回的对象的地址不同。

七、新增的属性没有响应式

数据初始化的时候通过defineProperty设置成响应式,新增的属性没有。

vue3使用proxy实现响应式,直接添加属性仍可以实现响应式

八、组件通信