vue之混入mixin

发布于:2025-05-22 ⋅ 阅读:(21) ⋅ 点赞:(0)

混合
基本概念‌
Mixin 是 Vue 中用于‌复用组件逻辑‌的机制,可将多个组件的公共选项(如 data、methods、生命周期钩子)抽离为独立模块,再混入到组件中。
比如我有两个组件同时用到了同一个数据name,同一个方法showAddress
把这写公共的部分可以提取出来,放在一个公共的hunhe.js文件中,

‌2. 核心特性‌
‌选项合并策略‌

data:组件数据优先,Mixin 数据次之(递归合并)。
methods/components:同名时组件覆盖 Mixin。
生命周期钩子:Mixin 钩子先执行,组件钩子后执行。
‌全局与局部混入‌

javascript
// 局部混入(组件内)
const myMixin = { methods: { log() { console.log(‘Mixin’); } } };
export default { mixins: [myMixin] };

// 全局混入(慎用!影响所有组件)
Vue.mixin({ created() { console.log(‘Global Mixin’); } });
‌3. 适用场景‌
‌逻辑复用‌:如表单验证、日志记录等通用功能。
‌跨组件共享‌:多个组件需相同生命周期逻辑(如埋点)。
‌4. 潜在问题与替代方案‌
‌命名冲突‌:需规范 Mixin 命名(如加前缀 mixin_)。
‌维护困难‌:过度使用会导致代码难以追踪,推荐优先使用‌组合式 API‌(Vue 3)。
5.实例
mixin.js

export const hunlu={
    data(){
        return {
            name:'我就是name'
        }
    },
    
}

export const hunlu2={
    methods: {
        showAddress(){
            alert(this.address);
        }
    },
}

school.vue

<template>
    <div>
        <div>{{ name }}</div>
        <div @click="showAddress">{{ address }}</div>
    </div>
</template>

<script>
import {hunlu,hunlu2} from '@/utils/mixin.js'
export default {
    data() {
        return{

            address:'北京西二旗'
        }
    },
    mixins:[hunlu,hunlu2]
}
</script>

student.vue

<template>
    <div>
        <div>{{ name }}</div>
        <div @click="showAddress">{{ address }}</div>
    </div>
</template>

<script>
import {hunlu,hunlu2} from '@/utils/mixin.js'
export default {
    data() {
        return{
            address:'北京三里屯'
        }
    },
       mixins:[hunlu,hunlu2]
}
</script>

父组件:

<template>
  <div class="app-container">
    <school></school>
    <student></student>
  </div>
</template>
import school from './components/school.vue'
import student from './components/student'
  components: { AddMask,school,student },

截图:在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到