Vue面试

本文详细阐述了Vue面试中常见的问题,包括v-show与v-if的区别、v-for中key的作用、组件通讯方式、Vue渲染和更新过程、v-model原理、MVVM理解、computed特点、组件data为何为函数、ajax请求时机、props传递、自定义v-model实现、组件复用策略、异步组件使用场景、keep-alive使用、beforeDestroy注意事项、Vuex中action与mutation的区别、Vue-router常用模式和异步加载配置、vnode描述DOM结构、数据监听API、数组变化监听、响应式原理、diff算法及其优化、Vue异步渲染和$nextTick作用、Vue性能优化建议。

v-show 和 v-if 的区别

  • v-show 通过CSSdisplay 控制显示和隐藏
  • v-if 组件真正的渲染和销毁,而不是显示和隐藏
  • 频繁切换显示状态用 v-show,否则用 v-if

为何在 v-for 中用 key

  • 必须用 key,且不能是index和random
  • diff 算法中通过tag 和 key 来判断,是否是sameNode
  • 减少渲染次数,提升渲染性能

Vue 组件如何通讯 ( 常见 )

  • 父子组件props和this.$emit
  • 自定义事件event. n o e v e n t . no event. noevent.off event.$emit
  • vuex

描述组件渲染和更新的过程

  • 响应式监听属性变化
  • 模板渲染
  • 虚拟dom
  • 执行render函数的时候会触发touch触发getter,触发getter之后会收集依赖到watcher,触发getter更改的时候会触发setter,setter会通知watcher,看是不是收集过了, 收集过了watcher会触发re-rander重新渲染
    在这里插入图片描述
  • </
### Vue 面试常见问题及答案 #### 1. Vuex 的使用场景 如果请求来的数据不需要被其他组件复用,仅在当前组件内使用,则无需将其放入 Vuex 的 state 中[^1]。然而,如果数据需要被多个组件共享或复用,那么应当将该数据存入 Vuex 的 state 中,并通过 action 来管理异步逻辑,以便于代码的维护和复用。 #### 2. Mixin 的作用 Mixin 是一种复用 Vue 组件选项的方式。通过 mixin,可以在多个组件之间共享 data、methods、components 等选项,从而减少代码重复,提升代码的可维护性[^2]。需要注意的是,在使用 mixin 时可能会遇到命名冲突的问题,因此应谨慎设计其结构。 #### 3. Computed 和 Watch 的区别与适用场景 - **Computed**:适用于依赖响应式数据进行复杂计算的场景。它会自动追踪依赖的数据变化,并在依赖更新时重新计算。computed 属性是基于它们的依赖进行缓存的,只有当依赖发生变化时才会重新求值[^2]。 - **Watch**:适用于监听某个特定数据的变化并执行副作用操作的场景。例如,当一个数据项改变时触发 AJAX 请求或其他非响应式操作。watch 不具备缓存机制,每次数据变化都会立即触发回调函数。 ```javascript // 示例:Computed 的使用 export default { data() { return { firstName: 'John', lastName: 'Doe' }; }, computed: { fullName() { return `${this.firstName} ${this.lastName}`; } } }; // 示例:Watch 的使用 export default { data() { return { searchQuery: '' }; }, watch: { searchQuery(newVal) { this.fetchData(newVal); } }, methods: { fetchData(query) { console.log('Fetching data for:', query); } } }; ``` #### 4. Vue 生命周期钩子的作用 Vue 实例从创建到销毁的过程中会经历一系列的生命周期钩子。这些钩子为开发者提供了在不同阶段执行自定义逻辑的机会。例如: - `beforeCreate` 和 `created`:用于初始化数据或配置事件监听器。 - `mounted`:适合进行 DOM 操作或启动定时器。 - `beforeDestroy` 和 `destroyed`:用于清理资源,如取消定时器或移除事件监听器。 #### 5. Vue Router 的模式及其区别 Vue Router 提供了两种主要的路由模式: - **Hash 模式**:URL 包含 `#` 符号,例如 `http://example.com/#/home`。这种模式兼容性较好,但 URL 不够美观。 - **History 模式**:利用 HTML5 的 History API 实现更优雅的 URL,例如 `http://example.com/home`。虽然美观,但在服务器端需要进行额外配置以支持路由回退。 ```javascript // 配置 Vue Router 的示例 import Vue from 'vue'; import Router from 'vue-router'; import Home from './views/Home.vue'; Vue.use(Router); const router = new Router({ mode: 'history', // 使用 History 模式 routes: [ { path: '/', name: 'home', component: Home } ] }); export default router; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值