前端面试vue篇

1.vue中常见的指令
  - v-for
  - v-if
  - v-show
  - v-bind
  - v-on
  - v-else
  - v-else-if
  - v-model
  - v-html
  - v-text
  - v-once
  - v-slot
  - v-pre

2. v-if和v-show的区别和场景,v-html和v-text的区别

3. vue生命周期
        初始化事件,生命周期
  beforeCreate
        注入数据,初始化响应式数据
  cteated
        是否有el和template选项
  beforeMount
        将数据挂载到模板中,将虚拟DOM转成真实dom
  mounted
        数据改变时触发,dom的更新前后
  beforeUpdate
  updated
        组件销毁的时候触发
  beforeDestroy
  destroyed

  activated
        缓存组件被激活时调用
  deactivated
        缓存组件被停用时调用

  errorCaptured
        子孙组件出错时调用

4. 计算属性,方法,侦听器的区别

5. 描述一下插槽,过滤器和混入

6. 什么是前端路由,传统的路由实现?

7. vue-router
  - vue路由有哪几种模式,有什么区别
  - 什么是嵌套路由,动态路由和路由重定向
  - 路由传参怎么做?
    - 通过动态路由做
  - 描述一下路由守卫

8. 描述一下vuex(从下面几个方向回答)
  - 是做什么的?
  - 有哪几个部分
  - 每个部分都做什么
  - 状态的流向(流程图)
  - 辅助函数

9. 组件传参怎么做
  - 父子传参
  - 非父子传参


10.vue响应式原理
  vue是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的getter,setter,当属性发生改变的时候,将变动发布给订阅者,触发监听回调
  由于 JavaScript 的限制,Vue 不能检测数组和对象的变化

  vue3.0使用了proxy

11.为什么要使用虚拟DOM
  - 虚拟DOM是为了解决浏览器性能问题而被设计出来的。
  - 比如有10次循环,虚拟DOM不会立即操作DOM,而是将10次的diff内容保存在一个js对象里面,然后一次性的操作,避免大量无谓的计算
  - 操作内存中的js对象的速度显然更快,等更新完后,再将最终的js对象映射成真实的DOM,交由浏览器绘制。

12. diff操作
  数据改变,虚拟DOM也会改变
  我们不想重新渲染vdom,我们只想渲染改变的部分,就需要用到diff算法
  两个树如果完全比较,时间复杂度是O(n^3),Vue的Diff算法的时间复杂度是O(n),意味着只能平层的比较两棵树的节点,放弃了深度遍历。似乎牺牲了一定的精准性来换取速度,但考虑到前端页面通常不会跨层移动DOM元素,这样做是优先的
  ```
    采用了同级比较,只有count相同的children进行比较
    比较他们的key,进行增加,删除,替换,换位等操作
  ```
 

### Vue 面试常见问题及答案 #### 1. Vue 中常见的指令及其用法 Vue 提供了许多内置指令来操作 DOM 和绑定数据。以下是几个常用的指令以及它们的用途: - **`v-bind`**: 动态地绑定一个或多个属性,或者一个组件 prop 到表达式[^1]。 ```html <!-- 绑定 class --> <div v-bind:class="{ active: isActive }"></div> <!-- 绑定 href 属性 --> <a :href="url">Link</a> ``` - **`v-if/v-else/v-else-if`**: 条件渲染,用于根据条件决定是否渲染某个元素。 ```html <div v-if="condition">True</div> <div v-else>False</div> ``` - **`v-for`**: 渲染列表项,基于数组或对象生成动态内容。 ```html <ul> <li v-for="(item, index) in items" :key="index">{{ item }}</li> </ul> ``` - **`v-on`**: 绑定事件监听器到指定方法上。 ```javascript <button v-on:click="handleClick">Click Me</button> ``` - **`v-model`**: 双向数据绑定,在表单输入和应用状态之间创建连接。 ```html <input v-model="message"> <p>{{ message }}</p> ``` - **`v-show`**: 根据表达式的真假值显示/隐藏 HTML 元素。它通过 CSS 的 `display` 属性控制可见性。 --- #### 2. Vue 3 和 Vue 2 的主要区别是什么? Vue 3 是 Vue.js 的重要升级版本,引入了一些新特性和改进。以下是两者的主要差异: - **Composition API vs Options API**: - Vue 2 使用的是 Options API,逻辑按照生命周期钩子分组,适合小型项目[^2]。 - Vue 3 引入了 Composition API,允许开发者更灵活地组织代码逻辑,尤其适用于复杂业务场景。 - **性能优化**: - Vue 3 对虚拟 DOM 进行了重构,提升了渲染速度并减少了内存占用。 - **Tree Shaking 支持**: - Vue 3 更好地支持按需加载功能模块,减少打包体积。 - **Fragment、Teleport 和新的响应式系统**: - Vue 3 新增 Fragment 支持多根节点组件;新增 Teleport 实现跨组件挂载;重写了响应式机制 (Proxy 替代 Object.defineProperty)。 --- #### 3. 如何注册全局组件和自定义指令? 可以通过 Vue 构造函数的方法实现全局配置。例如: - 注册全局组件: ```javascript Vue.component('my-button', { data: () => ({ count: 0, }), template: '<button @click="count++">Clicked {{ count }} times.</button>', }); ``` - 注册全局指令: ```javascript Vue.directive('focus', { inserted(el) { el.focus(); }, }); ``` 上述方式在 Vue 2 中有效,而在 Vue 3 中需要通过 `app` 实例完成类似的设置[^3]。 --- #### 4. Vue 的响应式原理是什么? Vue 的核心之一是其响应式系统。对于 Vue 2 而言,它是基于 ES5 的 `Object.defineProperty()` 方法实现的数据劫持技术,能够检测对象属性的变化并触发视图更新。然而该方法存在局限性(无法侦测新增属性),因此 Vue 3 升级为 Proxy 技术,提供了更强的兼容性和灵活性。 --- #### 5. 生命周期钩子有哪些?分别的作用是什么? Vue 定义了一套完整的生命周期流程,涵盖了实例从初始化到销毁的过程。典型阶段如下所示: | 钩子名称 | 描述 | |------------------|----------------------------------------------------------------------| | `beforeCreate` | 实例刚被创建时调用,此时还未解析模板或挂载 DOM | | `created` | 数据观测已完成,可以访问 this 访问到所有的选项 | | `mounted` | 当前组件已经完全挂载至页面 | | `updated` | 数据变化引起重新渲染之后 | 更多细节可参阅官方文档说明。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuwenjie_

感谢打赏,问题留言~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值