vue3面试题

504 阅读3分钟
vue3比vue2的优势?
1.性能的提升,打包大小减少41%,初次渲染快55%, 更新渲染快133%,内存减少54%
2.使用Proxy代替defineProperty实现响应式,重写虚拟DOM的实现和Tree-Shaking
3.更好支持TypeScript
4.新的特性
  Composition API(组合API)
  setup配置
  ref与reactive
  watch与watchEffect
  provide与inject
5.新的内置组件
  Fragment:支持多个根元素
  Teleport
  Suspense
Vue3性能提升方法?
1.编译阶段
	diff算法优化:vue3在diff算法中增加了静态标记:在发生变化的地方添加一个flag标记,
	静态提升:对不参与更新的元素做静态提升,只会被创建一次,在渲染中直接复用,免去了重复的创建操作,优化了运行时的内存占用
	事件监听缓存
	SSR优化
2.源码体积
	移除了不常用的api,tree shanking任何一个函数,如ref、reactive、computed等仅在用到时才打包,没用掉的模块都被摇掉,打包的整体体积变小
3.响应式系统
	vue2:采用defineproperty来劫持整个对象,进行深度遍历所有属性,给每个属性添加gettersetter实现响应式
	vue3:采用proxy重写响应式系统,因为proxy可以对整个对象进行监听,所以不需要深度遍历
	可以监听动态属性的添加
	可以监听到数组的索引和数组length属性
	可以监听删除属性
vue2、vue3生命周期对比
1. Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:
2. beforeDestroy改名为 beforeUnmount
3. destroyed改名为 unmounted
4. Vue3.0也提供了 Composition API 形式的生命周期钩子,与Vue2.x中钩子对应关系如下:
5. beforeCreate===>setup()
6. created=======>setup()
7. beforeMount ===>onBeforeMount
8. mounted=======>onMounted
9. beforeUpdate===>onBeforeUpdate
10. updated =======>onUpdated
11. beforeUnmount ==>onBeforeUnmount
12. unmounted =====>onUnmounted
vue2响应式原理、vue3响应式原理
vue2.x的响应式
对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。
数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)。
存在问题:
新增属性、删除属性, 界面不会更新。
直接通过下标修改数组, 界面不会自动更新。

Vue3.0的响应式
实现原理:
通过Proxy(代理): 拦截对象中任意属性的变化, 包括:属性值的读写、属性的添加、属性的删除等。
通过Reflect(反射): 对源对象的属性进行操作。
vue3响应式数据的判断?
isRef: 检查一个值是否为一个 ref 对象
isReactive: 检查一个对象是否是由 reactive 创建的响应式代理
isReadonly: 检查一个对象是否是由 readonly 创建的只读代理
isProxy: 检查一个对象是否是由 reactive 或者 readonly 方法创建的代理
vue3的常用 Composition API有哪些?
1. setup
2. ref函数
3. reactive函数
4. computed函数
5. watch函数
6. watchEffect函数
7. toRef
8. shallowReactive 与 shallowRef
9. readonly 与 shallowReadonly
10. readonly: 让一个响应式数据变为只读的(深只读)。
11. shallowReadonly:让一个响应式数据变为只读的(浅只读)。
12. toRaw 与 markRaw
13. customRef
14. provide 与 inject