前端开发面试题总结-vue2框架篇(二)

Vue2高频问答

一、为什么 Vue 的 data 属性必须声明为返回一个初始数据的函数?

回答重点:

Vue 的 data 属性声明成一个返回初始数据的函数,是为了确保每个组件实例都有独立的状态。通过这种方式,避免了组件使用相同的数据对象导致的状态共亨和互相干扰。

扩展知识

1)组件实例的独立性

Vue 中,每个组件实例都有自己的状态。假如 data 属性是一个对象而不是函数,那么多个实例将共享同一个数据对象。当一个实例修改数据时,其他实例的状态也会受到影响,导致数据污染。通过将 data声明为函数,每个组件实例都会调用这个函数,从而返回独立的数据对象。这保证了各个实例的互不干涉。

2)Vue 实例和单文件组件的区别

在 vue 实例(如 new vue创建的根实例)中,data 可以是一个对象,因为根实例通常只有一个实例。然而,在单文件组件 (如.vue 文件)中,由于你可能会创建多个组件实例,所以data必须声明为函数。

二、Vue 在 created 和 mounted 这两个生命周期钩子中请求数据有什么区别?

在 Vue.js 中,created 和 mounted 都是常用的生命周期钩子,但它们在使用场景和请求数据时有几个主要的区别。

1)created :这个钩子在实例被创建之后调用。在这个阶段,组件实例已经完成了数据观察、计算属性和方法的初始化,但还没有挂载到 DOM 上。这意味着你可以在这个阶段进行一些数据请求,但无法访问 DOM 元素。

2)mounted:这个钩子在实例被挂载之后调用,在这个阶段,所有的子组件也会一起挂载完成。这意味着你可以访问 DOM 元素并操作它们。如果你需要做一些 DOM 相关的操作或等待组件完全挂载后再执行某些逻辑,可以选择这个钩子。

三、Vue Router 的 hash 模式和 history 模式有什么区别?

Vue Router 的 hash 模式和 history 模式主要区别在于 URL 的表现形式和实现方式。

1)hash 模式:URL中会出现#号,例如:http://example.com/#/home。hash模式的原理是基于 window.location.hash 的变化,来实现更新视图而不重新加载页面。hash 模式的核心特性是利用了浏览器对哈希的支持,使得页面在哈希值变化时不会重新加载全部内容。

2)history模式:URL是普通路径形式,例如:http:/example.com/home。history模式的原理是基于 HTML5的 history.pushstate和 history.replacestate,通过这两个 AP|来操作浏览器历史记录,改变 URL 同时不重新加载页面。所以使用 history 模式时,需要在服务端进行配置,让所有路由都指向同一个入口页面,否则会出现 404 错误。

四、为什么 Vue2 中给对象添加新属性后,界面没有刷新?

这是因为 Vue 的响应式系统对对象的属性增加进行了限制。Vue 2x不支持对象动态添加新属性的检测,所以 Vue 无法检测到对对象属性新增的变化,从而也无法自动更新界面。

五、vue中父子组件的生命周期钩子函数执行顺序

vue中的组件生命周期是: 四大阶段八大钩子, 我这里就用选项式api来和您说说他们的执行顺序

  1. 在前两个阶段: 创建和挂载阶段, 执行顺序分别是:
    beforeCreate(父)--->created(父)---->beforeMount(父)--->beforeCreate(子)--->created(子)--->beforeMount(子)--->mounted(子) ---> mounted(父)
  2. 在更新阶段
    beforeUpdate(父) ---> beforeUpdate(子) ---> updated(子) ---> updated(父)
  3. 销毁阶段
    beforeDestroy(父) ---> beforeDestroy(子) ---> destroyed(子) ---> destroyed(父)

六、用vue做管理系统开发时, 用到了哪些UI组件库?

管理系统: 多数都是二次开发(不是从零到一)

二次开发常见的模板库: vue-element-admin , pure-admin

vue2: ElementUI, Ant Design Vue

vue3: ElementPlus, Ant Design Vue

七、22、说一说计算属性和watch的区别?

我先说下计算属性和watch的概念:

计算属性:

  1. 当一个属性的结果需要通过其它数据运算得来, 此时就可以把这个属性定义成计算属性
  2. 计算属性是有缓存的, 多处去使用计算属性也只会计算一次, 除非依赖的数据发生变化
  3. 计算属性有完整写法, 可以通过get和set方法实现
  4. 应用场景: 购物车总价, 全选
    watch:
  5. watch是一个侦听器, 如果某个属性的值发生变化, 我们想要去做一些业务操作, 我们就可以用watch去侦听该属性
  6. watch可以通过deep属性去实现深度侦听
  7. 应用场景: 实时翻译

再说一下计算属性和watch的区别:

  1. 计算属性是属性, watch则是对属性的侦听
  2. 计算属性内部不能有异步的操作, 但是watch是可以有异步操作的
相关推荐
剪刀石头布啊4 分钟前
var、let、const与闭包、垃圾回收
前端·javascript
剪刀石头布啊5 分钟前
js常见的单例
前端·javascript
剪刀石头布啊6 分钟前
数据口径
前端·后端·程序员
剪刀石头布啊10 分钟前
http状态码大全
前端·后端·程序员
剪刀石头布啊12 分钟前
iframe通信、跨标签通信的常见方案
前端·javascript·html
宇之广曜21 分钟前
搭建 Mock 服务,实现前端自调
前端·mock
yuko093123 分钟前
【手机验证码】+86垂直居中的有趣问题
前端
用户15129054522026 分钟前
Springboot中前端向后端传递数据的几种方式
前端
阿星做前端27 分钟前
如何构建一个自己的 Node.js 模块解析器:node:module 钩子详解
前端·javascript·node.js
用户15129054522030 分钟前
Web Worker:让前端飞起来的隐形引擎
前端