Vue 面试核心知识点详解

Vue 面试核心知识点详解与答题策略

一、Vue 核心概念与原理

  1. ​响应式数据绑定原理​
    Vue 2.x 使用 Object.defineProperty 劫持数据属性的 getter/setter,结合​​发布-订阅模式​​(依赖收集器 Dep 和观察者 Watcher)实现数据变化自动更新视图。
    Vue 3.x 改用 ​​Proxy API​​,直接代理整个对象,解决了 Vue 2 中数组索引修改、对象属性增删无法监听的缺陷,性能更高且支持动态新增属性。

  2. ​生命周期钩子函数​
    关键钩子执行顺序与场景:

    • beforeCreate:实例初始化,​​数据观测未开始​​。

    • created:数据观测完成,​​可访问 data/computed​​,但 DOM 未生成(适合异步请求)。

    • mounted:​​DOM 已挂载​​,可操作 DOM 或访问 $refs

    • beforeUpdate/updated:数据更新前后触发。

    • beforeDestroy/destroyed:实例销毁前清理定时器、解绑事件。

  3. ​指令与模板语法​

    • v-if vs v-show
      v-if 是​​条件渲染​​(动态增删 DOM),v-show 是 ​​CSS 切换​​(display: none),频繁切换用 v-show

    • v-for 必须加 ​key​:用于 ​​VDOM Diff 算法​​高效复用节点(避免用 index,推荐唯一 ID)。

    • v-model:语法糖,等价于 :value + @input,支持自定义组件双向绑定。


二、组件化开发进阶

  1. ​组件通信方式​

    方式适用场景示例
    ​Props/Events​父子组件父传子:<child :data="parentData">,子触发 this.$emit('event')58
    ​Event Bus​任意组件const bus = new Vue()bus.$on/ $emit410
    ​Vuex​跨层级共享状态集中式状态管理(见下文)
    ​Provide/Inject​祖先→子孙祖先 provide: { data },子孙 inject: ['data']10
  2. ​高级组件技术​

    • ​插槽(Slots)​​:

      • 默认插槽:<slot> 接收父组件内容。

      • 具名插槽:<slot name="header"> + <template v-slot:header>

    • ​异步组件​​:

      const Foo = () => import('./Foo.vue')  // 路由懒加载或按需加载
      
    • ​动态组件​​:

      <component :is="currentComponent"></component>  <!-- 配合 keep-alive 缓存状态 -->
      

三、路由与状态管理

  1. ​Vue Router 核心​

    • ​路由守卫​​:

      • 全局守卫:router.beforeEach((to, from, next) => {})(适合权限校验)。

      • 组件内守卫:beforeRouteEnter(无法访问 this,可用 next(vm => {}) 回调)。

    • ​路由传参​​:

      • 动态路由:path: '/user/:id' → this.$route.params.id

      • Query 参数:/user?id=123 → this.$route.query.id

  2. ​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 } // 计算属性  
      })  
      
    • ​为何 Mutation 必须同步​​?
      确保状态变更可被 DevTools 追踪,异步操作需通过 Action 提交 Mutation。


四、性能优化与最佳实践

  1. ​性能优化策略​

    • ​代码分割​​:路由懒加载(() => import('./Component.vue'))。

    • ​缓存组件​​:<keep-alive> 包裹动态组件,减少重复渲染。

    • ​计算属性缓存​​:computed 依赖不变时复用结果(比 methods 高效)。

    • ​避免 v-if 和 v-for 共用​​:Vue 优先执行 v-for,导致不必要的循环(可改用计算属性过滤数据)。

  2. ​错误处理​

    • 全局捕获:Vue.config.errorHandler = (err, vm, info) => { /* 上报错误 */ }

    • 组件内捕获:errorCaptured 钩子捕获子孙组件错误。


五、Vue 3 新特性剖析

  1. ​Composition API vs Options API​

    • ​Options API​​:按选项(data、methods)组织代码,简单但逻辑分散。

    • ​Composition API​​:基于函数(setup())​​按逻辑功能组织代码​​,支持复用(类似 React Hooks)。

      setup() {  
        const count = ref(0);  
        const double = computed(() => count.value * 2);  
        return { count, double };  
      }  
      
  2. ​其他重大改进​

    • ​Teleport​​:将组件渲染到 DOM 任意位置(如模态框)。

    • ​Fragments​​:支持多根节点模板。

    • ​Tree-shaking 优化​​:未使用模块不打包进生产代码。


结语

掌握 Vue 不仅要熟记 API,更要深入其设计思想(如响应式、组件化)。面试时建议结合项目经验,如:“我在电商项目中用 Vuex 管理购物车状态,通过 Mutation 保证数据变更可追踪”。同时关注 Vue 3 生态迁移趋势,理解底层原理(如 Virtual DOM Diff)能显著提升回答深度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值