Vue中的mixin

Mixin是Vue中用于复用组件功能的一种机制,它允许开发者将公共逻辑或配置抽离出来,当需要时混入到组件中,减少代码冗余。在组件创建时,混入的生命周期函数和方法会被合并,且优先执行Mixin中的。Vue3中虽然推荐使用组合式API,但Mixin仍然可用,可按需进行局部或全局混入。
摘要由CSDN通过智能技术生成

其实,Mixin并不是Vue专属的,可以理解成一种思想,翻译过来就是 混入 的意思。在很多框架里其实都有Mixin(混入)

对于Mixin而言,官方解释为:

混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的 可复用功能一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

如果要用大白话解释的话,就是 我们可以将组件的公共逻辑或者配置提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部即可。这样做的好处是,可以减少代码冗余并使得后期维护更容易。

Mixin的定义

定义mixin其实很简单,因为它就是一个对象而已,只不过它可以包含Vue组件的一些常见配置,比如data、method或是钩子函数等等。

定义mixin.js

let mixin = {
  created() {
    console.log("我是mixin里面的created!")
  },
  methods: {
    hello() {
      console.log("hello from mixin!")
    }
  }
}
 
export default mixin

组件中使用mixin

<template>
  <div class="home">
    <span>This is a Home page</span>
  </div>
</template>
 
<script>
import myMixins from "../mixins";
export default {
  name: 'Home',
  mixins: [myMixins],
  mounted(){         
    this.hello()     //在该组件中并没用定义hello方法,使用的是混入中的hello
  }
}
</script>

由于在Vue2时,没有组合式API这一说法,所以mixin可能会更好解决很多问题。但是到了Vue3,这种方式已经不被推荐了

如果硬要用也是可以的,例如

let mixin = {
    methods:{
        hello(){
            console.log("Hello Mixin");
        }
    }
}
export default mixin
<template>
  <div class="home">
    <h1>This is a Home Page</h1>
    <button @click="test">Mixin</button>
  </div>
</template>

<script>
import {getCurrentInstance} from 'vue'
import MyMixin from '../mixin'
export default {
    name: "HomePage",
    mixins: [MyMixin],
    setup(){
        const {proxy} = getCurrentInstance()
        const test = () => {
            proxy.hello()
        }
        return {
            test
        }
    }
}
</script>

最后就是公共的mixin定义好以后,可以根据不同的业务场景,能分为两种:局部混入和全局混入。

局部混入的话,和组件的按需加载是差不多的,需要用的再引入

全局混入的话,代表在项目的任何组件中都可以使用mixin

总结:

  • mixin中的生命周期函数会和组件的生命周期函数一起合并执行

  • mixin中的data数据在组件中也可以使用

  • mixin中的方法在组件内部可以直接调用

  • 生命周期函数合并后执行顺序:先执行mixin中的,后执行组件的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值