vue3面试题(个人笔记)

vue3比vue2有什么优势?


性能更好,打包体积更小,更好的ts支持,更好的代码组织,更好的逻辑抽离,更多的新功能。

描述Vue3生命周期


Composition API的生命周期:

  • onMounted()
  • onUpdated()
  • onUnmounted()
  • onBeforeMount()
  • onBeforeUpdate()
  • onBeforeUnmount()
  • onErrorCaptured()
  • onRenderTracked()
  • onRenderTriggered()
  • onActivated()
  • onDeactivated()
  • onServerPrefetch()

beforecate和created被setup方法本身所取代。

Options API的生命周期:

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeUnmount
  • unmounted
  • errorCaptured
  • renderTracked
  • renderTriggered
  • activated
  • deactivated
  • serverPrefetch

如何看待Composition API 和 Options API?


Composition APIOptions API是Vue.js中的两种组件编写方式。

Options API是Vue.js早期版本中使用的编写方式,通过定义一个options对象进行组件的配置,包括props、data、methods、computed、watch等选项。这种方式的优点在于结构清晰、易于理解,在小型项目中比较实用。

Composition APIVue.js 3.x版本中新引入的一种组件编写方式,它以函数的形式组织我们的代码,允许我们将相关部分组合起来,提高了代码的可维护性和重用性。Composition API还提供了模块化、类型推断等功能,可以更好地实现面向对象编程的思想。

Composition API 更好的代码组织,更好的逻辑复用和可维护性,更好的类型推导,可拓展性更好;

两种API各有优缺点,使用哪种API取决于具体的项目需求。对于小型项目,Options API更为简单方便;对于大型项目,Composition API可以更好地组织代码。

总之,Vue.js的Composition APIOptions API是为了满足不同开发者的需求而存在的,我们应该根据具体的场景选择使用哪种API,以达到更好的开发效果和代码质量。

官方文档解答:为什么要有组合式 API?

Vue3.0有什么更新?


性能优化Vue.js 3.0使用了Proxy替代Object.defineProperty实现响应式,并且使用了静态提升技术来提高渲染性能。新增了编译时优化,在编译时进行模板静态分析,并生成更高效的渲染函数。

Composition APIComposition API是一个全新的组件逻辑复用方式,可以更好地组合和复用组件的逻辑。

TypeScript支持Vue.js 3.0完全支持TypeScript,在编写Vue应用程序时可以更方便地利用TS的类型检查和自动补全功能。

新的自定义渲染APIVue.js 3.0的自定义渲染API允许开发者在细粒度上控制组件渲染行为,包括自定义渲染器、组件事件和生命周期等。

改进的Vue CLIVue.js 3.0使用了改进的Vue CLI,可以更加灵活地配置项目,同时支持Vue.js2.x项目升级到Vue.js 3.0

移除一些APIVue.js 3.0移除了一些不常用的API,如过渡相关API,部分修饰符等。

Proxy和Object.defineProperty的区别?


ProxyObject.defineProperty都可以用来实现JavaScript对象的响应式,但是它们有一些区别:

实现方式ProxyES6新增的一种特性,使用了一种代理机制来实现响应式。而Object.defineProperty是在ES5中引入的,使用了gettersetter方法来实现。

作用对象Proxy可以代理整个对象,包括对象的所有属性、数组的所有元素以及类似数组对象的所有元素。而Object.defineProperty只能代理对象上定义的属性。

监听属性Proxy可以监听到新增属性和删除属性的操作,而Object.defineProperty只能监听到已经定义的属性的变化。

性能:由于ProxyES6新增特性,其内部实现采用了更加高效的算法,相对于Object.defineProperty来说在性能方面有一定的优势。

综上所述,虽然Object.definePropertyVue.js 2.x中用来实现响应式,但是在Vue.js 3.0中已经采用了Proxy来替代,这是因为Proxy相对于Object.defineProperty拥有更优异的性能和更强大的能力。

Vue3如何实现响应式?


使用ProxyReflect API实现vue3响应式。

Vue3会将响应式对象转换为一个Proxy对象,并利用Proxy对象的getset拦截器来实现对属性的监听和更新。当访问响应式对象的属性时,get拦截器会被触发,此时会收集当前的依赖关系,并返回属性的值;当修改响应式对象的属性时,set拦截器会被触发,此时会触发更新操作,并通知相关的依赖进行更新。

优点:可监听属性的变化、新增与删除,监听数组的变化

watch和watchEffect的区别?


watch 和 watchEffect 都是监听器,watchEffect 是一个副作用函数。它们之间的区别有:

watch 既要指明监视的数据源,也要指明监视的回调。而 watchEffect 可以自动监听数据源作为依赖。不用指明监视哪个数据,监视的回调中用到哪个数据,那就监视哪个数据。

watch 可以访问改变之前和之后的值,watchEffect 只能获取改变后的值。

watch 运行的时候不会立即执行,值改变后才会执行,而 watchEffect 运行后可立即执行。这一点可以通过 watch 的配置项 immediate 改变。

watchEffect有点像 computed , 但 computed 注重的计算出来的值(回调函数的返回值), 所以必须要写返回值。而 watcheffect注重的是过程(回调函数的函数体),所以不用写返回值。

watch与 vue2.x中 watch 配置功能一致,但也有两个小坑:

  • 监视 reactive 定义的响应式数据时,oldValue 无法正确获取,强制开启了深度监视(deep配置失效)
  • 监视 reactive 定义的响应式数据中某个属性时,deep配置有效。

请介绍Vue3中的Teleport组件


Vue 3 中新增了teleport(瞬移)组件,可以将组件的 DOM 插到指定的组件层,而不是默认的父组件层,可以用于在应用中创建模态框、悬浮提示框、通知框等组件。

Teleport 组件可以传递两个属性:

to (必填):指定组件需要挂载到的 DOM 节点的 ID,如果使用插槽的方式定义了目标容器也可以传入一个选择器字符串。

disabled (可选):一个标志位指示此节点是否应该被瞬移到目标中,一般情况下,这个 props 建议设为一个响应式变量来控制 caption 是否展示。

总之,Teleport 组件是 Vue3 中新增的一个非常有用的组件,可以方便地实现一些弹出框、提示框等组件的功能,提高了开发效率。

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


ref: 函数可以接收原始数据类型引用数据类型。ref函数创建的响应式数据,在模板中可以直接被使用,在 JS 中需要通过 .value 的形式才能使用。

reactive: 函数只能接收引用数据类型

toRef:针对一个响应式对象的属性创建一个ref,使得该属性具有响应式,两者之间保持引用关系。

你可能感兴趣的:(面试题汇总与解析,课程设计,spring,boot,vue.js,java,学习)