Vue3 相较于 Vue2 有以下优势:

  1. 更小的体积:Vue3 使用了全新的响应式系统,减少了运行时的代码量,使得整个库更小巧。
  2. 更好的性能:Vue3 对响应式系统进行了优化,使用了 Proxy 代理对象替代了 Vue2 中的 Object.defineProperty,提升了性能。
  3. 更好的 TypeScript 支持:Vue3 对 TypeScript 的支持更加友好,提供了更好的类型推导和类型检查。
  4. 更灵活的组合式 API:Vue3 引入了 Composition API,使得组件的逻辑可以更灵活地组织和复用,提供了更好的代码组织方式。

Vue3 的生命周期

Vue3 的生命周期包括:

  1. beforeCreate: 组件实例刚被创建,组件的数据观测和初始化都未开始。
  2. created: 组件实例已经创建完成,数据观测和初始化已经完成,但是 DOM 节点还未生成,$el 属性不存在。
  3. beforeMount: 组件即将被挂载到页面上。
  4. mounted: 组件已经被挂载到页面上,此时 DOM 节点已经生成。
  5. beforeUpdate: 组件即将被更新,数据更新之前。
  6. updated: 组件已经被更新,数据更新之后。
  7. beforeUnmount: 组件即将被卸载,此时组件实例仍然可用。
  8. unmounted: 组件已经被卸载,组件实例销毁。

Composition API 和 Options API 的区别

Composition API 和 Options API 是 Vue3 中两种不同的代码组织方式。Options API 是 Vue2 中常用的方式,通过选项的方式将组件的数据、计算属性、方法等组织在一起。而 Composition API 是 Vue3 中引入的全新的组合式 API,它允许将相关的逻辑拆分为独立的函数,提供了更好的代码组织和复用方式。

Vue3 的更新

Vue3 中的更新包括:

  1. 更快的渲染:Vue3 对核心渲染机制进行了优化,减少了不必要的操作,提升了渲染性能。
  2. 更好的响应式:Vue3 使用了 Proxy 对象替代了 Vue2 中的 Object.defineProperty,提供了更好的响应式能力。
  3. 更好的 TypeScript 支持:Vue3 对 TypeScript 的支持更加友好,提供了更好的类型推导和类型检查。
  4. 更小的体积:Vue3 通过优化代码结构和删除冗余代码,使得整个库的体积更小。

Proxy 和 Object.defineProperty 的区别

  1. Proxy 可以监听整个对象的变化,而 Object.defineProperty 只能监听对象的属性。
  2. Proxy 可以监听数组的变化,而 Object.defineProperty 无法监听数组的变化。
  3. Proxy 可以监听动态新增的属性,而 Object.defineProperty 无法监听动态新增的属性。
  4. Proxy 可以拦截更多的操作,比如删除属性、遍历属性等,而 Object.defineProperty 只能拦截读取和修改属性的操作。

Vue3 升级的重要功能

Vue3 升级的重要功能包括:

  1. Composition API:提供了更灵活的组件代码组织方式。
  2. Fragments:允许多个根节点的存在。
  3. Teleport:允许将组件的内容渲染到任意位置。
  4. Suspense:提供了更好的异步加载和组件占位的方式。
  5. 新的响应式系统:使用 Proxy 对象替代了 Object.defineProperty,提升了性能和功能。

Vue3 为什么比 Vue2 快?

Vue3 比 Vue2 快的原因主要有以下几点:

  1. 优化的渲染机制:Vue3 对核心渲染机制进行了优化,减少了不必要的操作,提升了渲染性能。
  2. 更好的响应式系统:Vue3 使用了 Proxy 对象替代了 Vue2 中的 Object.defineProperty,提供了更好的响应式能力,减少了响应式系统的开销。
  3. 更小的体积:Vue3 通过优化代码结构和删除冗余代码,使得整个库的体积更小,减少了加载和运行的时间。

Vue3 如何实现响应式?

Vue3 实现响应式的方式是通过使用 Proxy 对象来监听对象的变化,当对象的属性发生变化时,会触发相应的更新操作。同时,Vue3 还提供了一些辅助函数如 reactive、ref、toRef 和 toRefs,用于快速创建响应式数据。

Vue3.0 编译做了哪一些优化?

Vue3.0 在编译方面做了一些优化,包括:

  1. 静态提升:将静态节点提升为常量,减少了运行时的开销。
  2. Patch flag:通过标记节点的类型和属性的修改情况,减少了不必要的操作。
  3. 缓存事件处理函数:对于事件处理函数,Vue3 会缓存起来以减少重新创建的开销。
  4. hoistStatic:将静态节点提升到父组件的渲染函数外部,减少了重复渲染的开销。

watch 和 watchEffect 的区别?

  1. watch 可以监视指定的数据变化,并执行特定的回调函数,可以指定要监视的数据和回调函数的依赖,可以通过配置项进行更多的定制。
  2. watchEffect 是一个自动追踪依赖的响应式函数,它会自动追踪函数内使用的所有响应式数据,并在数据变化时重新运行函数。

请介绍 Vue3 中的 Teleport 组件

Vue3 中的 Teleport 组件可以将组件的内容渲染到任意位置,可以通过 Teleport 指定目标容器的选择器或 DOM 节点,从而实现将组件的内容渲染到指定位置。

如何理解 reactive、ref 、toRef 和 toRefs?谈谈 pinia?

在 Vue3 中,reactive、ref、toRef 和 toRefs 都是用于创建响应式数据的函数:

  1. reactive:将对象转化为响应式对象,返回一个 Proxy 对象,可以监听对象的变化。
  2. ref:将普通数据转化为响应式数据,返回一个包装对象,通过 .value 属性来获取和修改数据。
  3. toRef:将响应式对象的属性转化为单独的 ref,返回一个包装对象,通过 .value 属性来获取和修改属性的值。
  4. toRefs:将响应式对象的所有属性转化为 ref,返回一个包含所有属性的对象。

Pinia 是一个基于 Vue3 的状态管理库,它提供了类似于 Vuex 的功能,但使用了更好的 TypeScript 支持和更灵活的 API。Pinia 使用了 Vue3 的 Composition API 来组织和管理状态,提供了更好的代码组织和复用方式。

EventBus 与 mitt 区别?

EventBus 和 mitt 都是用于组件间通信的工具,它们的区别主要有以下几点:

  1. EventBus 是 Vue2 中提供的事件总线,使用 Vue 实例作为中心进行事件派发和监听。
  2. mitt 是一个独立的事件库,不依赖于任何框架,可以在任何地方使用。
  3. EventBus 使用特定的 Vue 实例作为中心,而 mitt 则是使用一个独立的事件管理对象。
  4. 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,
  }
}
Vue3 优势:性能提升、组合式 API、TypeScript 支持

原文地址: https://www.cveoy.top/t/topic/bqBN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录