mixin 允许把组件里重复的 data、methods、生命周期钩子抽成一个独立对象,任何组件引入后这些选项就会被混入。在选项式 API 时代它是逻辑复用的主力:权限校验、打开关闭弹窗这类横切逻辑抽成 mixin 后,多个组件一行引入即可获得相同能力。
mixin 的缺陷同样著名:混入的选项与组件自身的同名字段按规则合并,data 对象会递归合并、生命周期钩子全部执行,发生冲突时到底哪个生效全凭合并策略,调试起来很难追。Vue 3 推崇组合式函数替代 mixin,新项目应优先使用来源清晰、可 tree-shaking 的 composable 写法。
// counterMixins.js export const counterMixin = { data() { return { count: 0 }; }, methods: { add() { this.count++; } }, mounted() { console.log('混入的钩子也会执行'); } }; // 组件中使用 import { counterMixin } from './counterMixins.js'; export default { mixins: [counterMixin] };