mixin 与 vuex 的区别

答:

mixin 混入对象和 Vuex 的区别:

  • Vuex 是状态共享管理,所以 Vuex 中的所有变量和方法都是可以读取和更改并相互影响的;它是一个独立的状态管理库,所有组件共用一份 store。
  • mixin 可以定义公用的变量或方法,但是 mixin 中的数据是不共享的,也就是每个组件中的 mixin 实例都是独立的,都是单独存在的个体,不存在相互影响;mixin 更像是组件级别的逻辑复用。

mixin 的合并策略

  • 同名函数选项:会进行递归合并为数组,两个函数都会执行,先执行 mixin 中的同名函数,再执行组件自身的同名函数。
  • 同名对象选项:将会进行替换,组件内的同名对象会覆盖 mixin 中的同名对象。
// mixin.js
export default {
  data() {
    return { msg: 'from mixin' }
  },
  created() {
    console.log('mixin created')
  }
}
// 组件
import mixin from './mixin'

export default {
  mixins: [mixin],
  data() {
    return { msg: 'from component' } // 覆盖 mixin 中的 msg
  },
  created() {
    console.log('component created') // 先 mixin,后 component
  }
}

来源整理自:vue3js.cn 面试官系列