vue面试题

249 阅读5分钟

二、vue(2.0)必会的五道题!

单页面(SPA)的优缺点?vue2.0的生命周期?vue获取数据的生命周期是哪个?vue数据双向绑定是如何实现的?vue初始化页面闪动问题如何解决?

1、单页面(SPA)的优缺点?


SPA是一种比较流行的 Web 应用程序架构,它的主要特点是将所有的内容都加载到一个页面上,通过 JavaScript 动态地更新页面中的内容,而不需要每次切换页面时都重新加载整个页面。

优点:

  1. 更好的用户体验:由于单页面应用只需要加载一次 HTML、CSS 和 JavaScript,因此在切换页面时不需要重新加载整个页面,可以提供更流畅的用户体验
  2. 更快的加载速度:由于单页面应用只需要加载一次资源并且可以缓存静态资源,因此加载速度更快,减少了服务器的压力。
  3. 更好的交互性和动态性:由于单页面应用使用 Ajax 和 JavaScript 技术实现页面的动态更新,因此可以通过各种交互和动画效果来提升用户的体验。
  4. 更容易实现前后端分离:单页面应用可以将前后端分离,前端负责 UI 和交互逻辑,后端负责业务逻辑和数据服务,从而提高项目开发和维护的效率。

缺点:

  1. 不利于 SEO:由于单页面应用只有一个页面,而且页面内容是通过 JavaScript 动态生成的,因此不利于搜索引擎的爬取和索引。
  2. 对浏览器性能的要求较高:由于单页面应用需要动态地生成 DOM 和操作 DOM,因此对浏览器的性能要求较高。
  3. 需要自己建立堆栈管理:由于单页面应用只有一个页面,因此需要我们自己建立堆栈管理进行页面切换。
  4. 首次加载速度较慢:由于单页面应用需要加载所有资源,因此首次页面加载速度会比较慢,特别是在网络状态较差或者页面较复杂时。

2、vue2.0的生命周期有哪些?


  • beforeCreate: 实例刚被创建,组件属性计算之前
  • created:实例已经创建完成,数据观测和事件配置等已完成,但 $el 属性还没有关联到实例中
  • beforeMount: 模板编译/挂载之前
  • mounted: 模板编译/挂载之后
  • beforeUpdate: 更新之前
  • updated: 更新之后
  • activated: 组件被激活时调用,只对应 keep-alive 组件
  • deactivated: 组件被停用时调用,只对应 keep-alive 组件
  • beforeDestroy: 实例销毁之前调用。在这个阶段,实例仍然是可用的。
  • destroyed: 实例被销毁之后调用。在这个阶段,所有绑定和实例的指令都已经解绑,所有事件监听器也已被移除。

我们在项目中用的最多的钩子函数是mounted


3、vue获取数据的生命周期是哪个?


在 Vue 中,获取数据的生命周期通过 在 mounted 钩子函数中完成。

这是因为在 created 钩子函数中,数据还没有完全准备好,而在 mounted 钩子函数中,DOM 已经渲染完毕并且可以准确地获取到所需的元素,mounted 钩子函数中可以保证数据已经准备好并可以被渲染。

当组件实例化之后,Vue 会调用 beforeCreate、created 这两个生命周期钩子函数。在 created 钩子函数中,可以进行一些数据初始化的工作

若需要对获取到的数据进行一些操作,建议在 mounted 钩子函数中使用计算属性或者监听器等方式来对数据进行处理,以保证数据的正确性和可靠性


4、vue数据双向绑定是如何实现的?


Vue 中的数据双向绑定是基于Object.defineProperty() 方法进行实现的。

在 Vue 中,每个组件实例都有一个相应的 watcher 实例,它会在组件渲染时跟踪依赖,并在依赖项变更时更新视图。

当一个 data 属性被声明为 reactive 后,Vue 会创建一个 Dep 对象来跟踪这个属性的变化,Dep 对象包含多个与属性相关的 Watcher 对象,当属性变化时,该属性的所有 Watcher 对象都会收到通知。

在模板中使用 v-model 指令时,Vue 会自动生成一个带有 get 和 set 方法的“计算属性”,用于进行数据的双向绑定。通过该计算属性,可以监听组件模板中对应 input 元素的 input 和 change 事件以及 data 中对应数据属性的变化。当输入框中的值发生变化时,input 事件触发 computed 属性的 set 方法,进而改变 data 中对应属性的值;当 data 中对应数据属性的值发生变化时,watcher 会通知计算属性的 get 方法,最终使得对应的 input 元素的值更新。

Vue 的数据双向绑定是通过利用计算属性和 Watcher 对象实现,这一机制可以帮助开发者更方便地操作 DOM,同时也降低了维护数据流的难度。


5、vue初始化页面闪动问题如何解决?


通常是由于 Vue 在渲染页面时需要进行异步操作造成的。

  1. 缓存数据:在组件初始化阶段,可以尝试先将需要用到的数据进行缓存,在数据加载完成后再进行渲染,这样可以避免页面闪动。

  2. 使用 v-cloak 指令:该指令可用于防止闪动。

    <div v-cloak>
      {{ message }}
    </div>
    

    这样就可以使得 Vue 对应的模板在数据绑定完成前不会显示。

  3. 使用 v-if 指令:将组件的 template 使用 v-if 控制,只有在数据加载完成后才进行渲染。

需要根据不同情况去纠错,去不断尝试