Vue 中的混入(Mixin):概念、应用与vue3替代方案

一、什么是 mixin?

        mixin 是一个包含组件选项的对象。当组件使用了 mixin 时,mixin 中的 datamethodscreated 等生命周期钩子,会被“混入”到组件中。

二、mixin 的应用场景

1. 多个组件共享相似逻辑

例如:表单校验、权限控制、数据预处理等。

2. 生命周期逻辑复用

如多个组件初始化时都需拉取相同接口的数据。

3. 工具函数封装

统一封装格式化函数、事件监听、滚动处理等。有点类似于插件函数

看了上面的定义,是不是有点难以理解?我们来看一个例子就好了

// 定义一个 mixin
export const myMixin = {
  data() {
    return {
      msg: 'Hello from mixin'
    };
  },
  created() {
    console.log('Mixin created');
  },
  methods: {
    sayHi() {
      console.log(this.msg);
    }
  }
};

 这个例子中,我们对外暴露一个对象,下面是在组件使用它的方式

// 在组件中使用
export default {
  mixins: [myMixin],
  created() {
    console.log('Component created');
  }
};

控制台输出:

Mixin created
Component created

三、使用mixin 缺点

优点不必多说,就是提高代码的复用性。下面是缺点:

1.命名冲突:data、methods 容易撞名

注意:生命周期钩子将按先后顺序执行(mixin → 组件),但 data 和 methods 若有命名冲突,组件本身的定义优先!!!!

2.来源不明确:组件逻辑分散,难追踪,定义变量,函数,很难找到来源,在大型项目中会造成混乱

四.vue3中mixin的替代方案

在 Vue 2 时代,我们用 mixin 复用逻辑。但到了 Vue 3,有了新的、更好用的方式:Composition API

一.用 Composition API 怎么实现?

很简单,编写useCounter.js文件

// useCounter.js(一个组合函数)
import { ref } from 'vue';

export function useCounter() {
  const count = ref(0);
  function increment() {
    count.value++;
  }
  return {
    count,
    increment
  };
}

在组件中使用:

// MyComponent.vue
<script setup>
import { useCounter } from './useCounter';

const { count, increment } = useCounter();
</script>

<template>
  <button @click="increment">{{ count }}</button>
</template>

五.使用Composition API,生命周期的执行和命名冲突的处理方式是和mixin一样吗?

答案是不一样

mixinComposition API

1.所有 mixin 和组件自己的生命周期钩子都会被合并执行。

2.执行顺序:mixin → 组件本身

3.如果你有多个 mixin,它们之间的执行顺序依赖 mixins 的引入顺序。

1.你可以在组合函数里用 Vue 提供的生命周期钩子(如 onMounted()onCreated()),这些钩子setup() 执行时注册,并只作用于当前组件的生命周期

Composition API命名冲突问题

不会有命名冲突问题!因为所有东西都是你自己手动引入、手动命名的,而mixin是只导入了mixin的名字,根本看不到mixin里面的内容

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值