Vue3 优势:性能提升、组合式 API、TypeScript 支持
Vue3 相较于 Vue2 有以下优势:
- 更小的体积:Vue3 使用了全新的响应式系统,减少了运行时的代码量,使得整个库更小巧。
- 更好的性能:Vue3 对响应式系统进行了优化,使用了 Proxy 代理对象替代了 Vue2 中的 Object.defineProperty,提升了性能。
- 更好的 TypeScript 支持:Vue3 对 TypeScript 的支持更加友好,提供了更好的类型推导和类型检查。
- 更灵活的组合式 API:Vue3 引入了 Composition API,使得组件的逻辑可以更灵活地组织和复用,提供了更好的代码组织方式。
Vue3 的生命周期
Vue3 的生命周期包括:
- beforeCreate: 组件实例刚被创建,组件的数据观测和初始化都未开始。
- created: 组件实例已经创建完成,数据观测和初始化已经完成,但是 DOM 节点还未生成,$el 属性不存在。
- beforeMount: 组件即将被挂载到页面上。
- mounted: 组件已经被挂载到页面上,此时 DOM 节点已经生成。
- beforeUpdate: 组件即将被更新,数据更新之前。
- updated: 组件已经被更新,数据更新之后。
- beforeUnmount: 组件即将被卸载,此时组件实例仍然可用。
- unmounted: 组件已经被卸载,组件实例销毁。
Composition API 和 Options API 的区别
Composition API 和 Options API 是 Vue3 中两种不同的代码组织方式。Options API 是 Vue2 中常用的方式,通过选项的方式将组件的数据、计算属性、方法等组织在一起。而 Composition API 是 Vue3 中引入的全新的组合式 API,它允许将相关的逻辑拆分为独立的函数,提供了更好的代码组织和复用方式。
Vue3 的更新
Vue3 中的更新包括:
- 更快的渲染:Vue3 对核心渲染机制进行了优化,减少了不必要的操作,提升了渲染性能。
- 更好的响应式:Vue3 使用了 Proxy 对象替代了 Vue2 中的 Object.defineProperty,提供了更好的响应式能力。
- 更好的 TypeScript 支持:Vue3 对 TypeScript 的支持更加友好,提供了更好的类型推导和类型检查。
- 更小的体积:Vue3 通过优化代码结构和删除冗余代码,使得整个库的体积更小。
Proxy 和 Object.defineProperty 的区别
- Proxy 可以监听整个对象的变化,而 Object.defineProperty 只能监听对象的属性。
- Proxy 可以监听数组的变化,而 Object.defineProperty 无法监听数组的变化。
- Proxy 可以监听动态新增的属性,而 Object.defineProperty 无法监听动态新增的属性。
- Proxy 可以拦截更多的操作,比如删除属性、遍历属性等,而 Object.defineProperty 只能拦截读取和修改属性的操作。
Vue3 升级的重要功能
Vue3 升级的重要功能包括:
- Composition API:提供了更灵活的组件代码组织方式。
- Fragments:允许多个根节点的存在。
- Teleport:允许将组件的内容渲染到任意位置。
- Suspense:提供了更好的异步加载和组件占位的方式。
- 新的响应式系统:使用 Proxy 对象替代了 Object.defineProperty,提升了性能和功能。
Vue3 为什么比 Vue2 快?
Vue3 比 Vue2 快的原因主要有以下几点:
- 优化的渲染机制:Vue3 对核心渲染机制进行了优化,减少了不必要的操作,提升了渲染性能。
- 更好的响应式系统:Vue3 使用了 Proxy 对象替代了 Vue2 中的 Object.defineProperty,提供了更好的响应式能力,减少了响应式系统的开销。
- 更小的体积:Vue3 通过优化代码结构和删除冗余代码,使得整个库的体积更小,减少了加载和运行的时间。
Vue3 如何实现响应式?
Vue3 实现响应式的方式是通过使用 Proxy 对象来监听对象的变化,当对象的属性发生变化时,会触发相应的更新操作。同时,Vue3 还提供了一些辅助函数如 reactive、ref、toRef 和 toRefs,用于快速创建响应式数据。
Vue3.0 编译做了哪一些优化?
Vue3.0 在编译方面做了一些优化,包括:
- 静态提升:将静态节点提升为常量,减少了运行时的开销。
- Patch flag:通过标记节点的类型和属性的修改情况,减少了不必要的操作。
- 缓存事件处理函数:对于事件处理函数,Vue3 会缓存起来以减少重新创建的开销。
- hoistStatic:将静态节点提升到父组件的渲染函数外部,减少了重复渲染的开销。
watch 和 watchEffect 的区别?
- watch 可以监视指定的数据变化,并执行特定的回调函数,可以指定要监视的数据和回调函数的依赖,可以通过配置项进行更多的定制。
- watchEffect 是一个自动追踪依赖的响应式函数,它会自动追踪函数内使用的所有响应式数据,并在数据变化时重新运行函数。
请介绍 Vue3 中的 Teleport 组件
Vue3 中的 Teleport 组件可以将组件的内容渲染到任意位置,可以通过 Teleport 指定目标容器的选择器或 DOM 节点,从而实现将组件的内容渲染到指定位置。
如何理解 reactive、ref 、toRef 和 toRefs?谈谈 pinia?
在 Vue3 中,reactive、ref、toRef 和 toRefs 都是用于创建响应式数据的函数:
- reactive:将对象转化为响应式对象,返回一个 Proxy 对象,可以监听对象的变化。
- ref:将普通数据转化为响应式数据,返回一个包装对象,通过 .value 属性来获取和修改数据。
- toRef:将响应式对象的属性转化为单独的 ref,返回一个包装对象,通过 .value 属性来获取和修改属性的值。
- toRefs:将响应式对象的所有属性转化为 ref,返回一个包含所有属性的对象。
Pinia 是一个基于 Vue3 的状态管理库,它提供了类似于 Vuex 的功能,但使用了更好的 TypeScript 支持和更灵活的 API。Pinia 使用了 Vue3 的 Composition API 来组织和管理状态,提供了更好的代码组织和复用方式。
EventBus 与 mitt 区别?
EventBus 和 mitt 都是用于组件间通信的工具,它们的区别主要有以下几点:
- EventBus 是 Vue2 中提供的事件总线,使用 Vue 实例作为中心进行事件派发和监听。
- mitt 是一个独立的事件库,不依赖于任何框架,可以在任何地方使用。
- EventBus 使用特定的 Vue 实例作为中心,而 mitt 则是使用一个独立的事件管理对象。
- EventBus 的使用方式更加简单,直接通过 $emit 和 $on 方法进行事件的派发和监听,而 mitt 需要先创建一个事件管理对象。
script setup 是干啥的?
script setup 是 Vue3 中的一个新特性,用于简化组件的编写方式。使用 script setup,可以将组件的逻辑代码放在一个单独的 setup 函数中,可以通过参数的方式访问组件的属性、上下文和生命周期钩子,使得组件的代码更加清晰和简洁。
v-if 和 v-for 的优先级哪个高?
v-if 和 v-for 的优先级中,v-for 的优先级更高。也就是说,如果在同一个元素上同时使用了 v-if 和 v-for 指令,v-for 会先被解析和执行,然后再根据 v-if 的条件进行过滤。
setup 中如何获得组件实例?
在 setup 函数中,可以使用 getCurrentInstance() 函数来获取组件实例,然后通过 $el 属性来访问 DOM 节点。
import { ref, getCurrentInstance } from 'vue'
const count = ref(0)
const handleClick = () => {
count.value++
const instance = getCurrentInstance()
console.log(instance.$el)
}
setup() {
return {
count,
handleClick,
}
}
原文地址: https://www.cveoy.top/t/topic/bqBN 著作权归作者所有。请勿转载和采集!