一、关于框架
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实现响应式,直接添加属性仍可以实现响应式
八、组件通信