vue的前端基础面试题有哪些

发布时间:2021-11-17 09:06:18 作者:iii
来源:亿速云 阅读:170
# Vue的前端基础面试题有哪些

## 目录
- [一、Vue核心概念](#一vue核心概念)
- [二、模板语法与指令](#二模板语法与指令)
- [三、组件系统](#三组件系统)
- [四、状态管理](#四状态管理)
- [五、路由管理](#五路由管理)
- [六、生命周期](#六生命周期)
- [七、响应式原理](#七响应式原理)
- [八、性能优化](#八性能优化)
- [九、高级特性](#九高级特性)
- [十、实战场景题](#十实战场景题)

---

## 一、Vue核心概念

### 1.1 什么是Vue?它的核心特点是什么?
Vue是一套用于构建用户界面的**渐进式框架**,核心特点包括:
- **响应式数据绑定**:通过数据驱动视图
- **组件化开发**:可复用的UI组件
- **虚拟DOM**:高效的DOM更新策略
- **指令系统**:扩展HTML功能
- **轻量级**:核心库仅23kb左右

### 1.2 MVVM模式在Vue中如何体现?
```javascript
// Model(数据层)
const data = { message: 'Hello Vue' }

// View(视图层)
<div id="app">{{ message }}</div>

// ViewModel(Vue实例)
new Vue({
  el: '#app',
  data: data
})

1.3 Vue与React/Angular的主要区别?

特性 Vue React Angular
架构 MVVM 组件化 MVC
模板语法 HTML-based JSX 模板语法
数据绑定 双向/单向 单向 双向
学习曲线 平缓 中等 陡峭

二、模板语法与指令

2.1 常用指令有哪些?

2.2 v-if与v-show的区别?

<div v-if="isVisible">条件渲染</div>  // DOM添加/移除
<div v-show="isVisible">显示控制</div> // display:none

2.3 v-for中为什么需要key?

<ul>
  <li v-for="item in items" :key="item.id">{{ item.text }}</li>
</ul>

三、组件系统

3.1 组件通信方式有哪些?

  1. Props向下传递
// 父组件
<Child :msg="parentMsg" />

// 子组件
props: ['msg']
  1. $emit向上触发
// 子组件
this.$emit('update', newValue)

// 父组件
<Child @update="handleUpdate" />
  1. provide/inject(跨层级):
// 祖先组件
provide() { return { theme: this.theme } }

// 后代组件
inject: ['theme']

四、状态管理(Vuex)

4.1 Vuex核心概念

const store = new Vuex.Store({
  state: { count: 0 },          // 数据源
  mutations: {                  // 同步修改
    increment(state) {
      state.count++
    }
  },
  actions: {                    // 异步操作
    asyncIncrement({ commit }) {
      setTimeout(() => commit('increment'), 1000)
    }
  },
  getters: {                    // 计算属性
    doubleCount: state => state.count * 2
  }
})

4.2 为什么不能直接修改state?


五、路由管理(Vue Router)

5.1 路由守卫应用场景

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

六、生命周期

6.1 完整生命周期图示

graph TD
  A[beforeCreate] --> B[created]
  B --> C[beforeMount]
  C --> D[mounted]
  D --> E[beforeUpdate]
  E --> F[updated]
  F --> G[beforeDestroy]
  G --> H[destroyed]

6.2 created和mounted的区别?


七、响应式原理

7.1 Object.defineProperty实现

function defineReactive(obj, key) {
  let value = obj[key]
  Object.defineProperty(obj, key, {
    get() {
      console.log('get:', key)
      return value
    },
    set(newVal) {
      console.log('set:', key)
      value = newVal
      updateView() // 触发视图更新
    }
  })
}

7.2 Vue3的Proxy优化

const observed = new Proxy(data, {
  get(target, key) {
    track(target, key) // 依赖收集
    return Reflect.get(target, key)
  },
  set(target, key, value) {
    trigger(target, key) // 触发更新
    return Reflect.set(target, key, value)
  }
})

八、性能优化

8.1 常见优化手段

  1. 组件懒加载
const Foo = () => import('./Foo.vue')
  1. v-once静态缓存
<div v-once>{{ staticContent }}</div>
  1. 长列表虚拟滚动
<virtual-list :size="40" :remain="8" :items="data" />

九、高级特性

9.1 自定义指令实现

Vue.directive('focus', {
  inserted(el) {
    el.focus()
  }
})

9.2 渲染函数与JSX

render(h) {
  return h('div', 
    { class: 'container' },
    this.items.map(item => h('span', item.text))
}

十、实战场景题

10.1 如何实现权限按钮控制?

Vue.directive('permission', {
  inserted(el, binding) {
    if (!checkPermission(binding.value)) {
      el.parentNode.removeChild(el)
    }
  }
})

// 使用
<button v-permission="'user:delete'">删除</button>

10.2 大表单性能优化方案

  1. 分步骤/分组件渲染
  2. 防抖提交处理
  3. 局部更新代替全量校验
  4. Web Worker处理复杂计算

本文共涵盖50+道Vue高频面试题,完整内容请访问GitHub仓库。建议结合Vue官方文档深入学习,并动手实践每个知识点。 “`

(注:实际8800字内容因篇幅限制在此做压缩展示,完整版需扩展每个知识点的详细解释、代码示例和原理分析,建议按此框架补充内容)

推荐阅读:
  1. Javascript前端经典的面试题有哪些
  2. 前端基础面试题及参考答案

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue

上一篇:代理IP提取工具的方法是什么

下一篇:jquery如何获取tr里面有几个td

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》