Vue mixin和mixins 混入

Vue.js 混入(mixin)与组件(mixins)的区别解析
本文详细介绍了Vue中的mixin和mixins选项,mixin用于全局注册混入,影响所有Vue实例,而mixins用于局部组件间共享属性和方法。通过示例展示了如何定义和使用mixin,以及它们与组件引用的区别。混入和组件引用在扩展组件功能上有所不同,混入会合并属性和方法,而组件保持相对独立。

Vue之mixin和mixins

mixin就是全局注册一个混入,影响注册之后所有创建的每个 Vue 实例。例如给全部文件添加一些公用的实例(如方法、过滤器等)
插件作者可以使用混入,向组件注入自定义的行为。不推荐在应用代码中使用。

先定义mixin.js

const mixin = {
  methods: {    
      two(num){
          return num*num
      }  
  }
}
export defaullt mixin

在main.js文件全局引入

import mixin from './mixin'
Vue.mixin(mixin)

其他vue页面里面就可以使用mixin里面定义好的方法,如:

 data() {
    return {
      name: "abc",
      square: this.two(3)
    }
  }

mixins
mixins 选项接受一个混入对象的数组。这些混入实例对象可以像正常的实例对象一样包含选项,他们将在 Vue.extend() 里最终选择使用相同的选项合并逻辑合并。

mixins和普通情况下引入组件有什么区别?
组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是泾渭分明,相对独立。
而mixins则是在引入组件之后,则是将组件内部的内容如data等方法、method等属性与父组件相应内容进行合并。相当于在引入后,父组件的各种属性方法都被扩充了。

单纯组件引用:
父组件 + 子组件 >>> 父组件 + 子组件
mixins:
父组件 + 子组件 >>> new父组件
值得注意的是,在使用mixins时,父组件和子组件同时拥有着子组件内的各种属性方法,但这并不意味着他们同时共享、同时处理这些变量,两者之间除了合并,是不会进行任何通信的

### Vue2 中 `mixin` `mixins` 的区别及用法 #### 一、基本概念 在 Vue2 中,`mixin` 是一种用于实现代码复用的功能机制。它可以将一些通用的方法、数据、生命周期钩子等封装成一个对象,在多个组件之间共享。而 `mixins` 则是用来声明需要引入的一个或多个 `mixin` 对象的选项。 - **`mixin`**: 单个混入对象,通常是一个包含组件选项的对象[^1]。 - **`mixins`**: 多个混入对象组成的数组,允许在一个组件中同时引入多个 `mixin` 实现更复杂的复用需求[^1]。 --- #### 二、具体用法 ##### 1. 定义使用单个 `mixin` 定义一个简单的 `mixin` 对象: ```javascript // 定义一个 mixin 对象 const myMixin = { data() { return { sharedData: 'This is from a single mixin' }; }, methods: { sharedMethod() { console.log('Shared method called'); } }, created() { console.log('Created hook from single mixin'); } }; ``` 在组件中使用该 `mixin`: ```javascript export default { mixins: [myMixin], // 使用单个 mixin mounted() { this.sharedMethod(); // 可以访问来自 mixin 的方法 console.log(this.sharedData); // 访问来自 mixin 的数据 } }; ``` --- ##### 2. 同时使用多个 `mixin` 如果需要在同一组件中引入多个 `mixin`,可以通过 `mixins` 数组的形式完成: ```javascript // 定义两个不同的 mixin 对象 const firstMixin = { data() { return { name: 'First' }; }, methods: { greet() { console.log(`Hello, I'm ${this.name}`); } } }; const secondMixin = { data() { return { age: 20 }; }, methods: { info() { console.log(`${this.name} is ${this.age} years old`); } } }; // 在组件中同时引入这两个 mixin export default { mixins: [firstMixin, secondMixin], mounted() { this.greet(); // 输出 "Hello, I'm First" this.info(); // 输出 "First is 20 years old" } }; ``` --- #### 三、`mixin` `mixins` 的主要区别 | 特性 | `mixin` | `mixins` | |-------------------|----------------------------------------|---------------------------------------| | 类型 | 单个混入对象 | 多个混入对象组成的数组 | | 使用场景 | 当只需要引入单一功能模块时 | 需要组合多个功能模块时 | | 数据/方法冲突处理 | 如果存在同名的数据或方法,后者会覆盖前者[^4] | 同样遵循覆盖原则,但顺序会影响最终的结果[^4] | --- #### 四、注意事项 1. **命名冲突问题** - 当多个 `mixin` 或者组件本身具有相同的属性或方法名称时,Vue 会按照一定的优先级规则进行合并。一般而言,组件内的定义会覆盖 `mixin` 中的定义[^3]。 2. **复杂度管理** - 过度依赖 `mixin` 可能会使代码变得难以维护,尤其是在大型项目中。推荐仅在必要的情况下使用,并保持其职责单一化[^2]。 3. **性能影响** - 每次引入 `mixin` 都会在组件初始化阶段增加额外的合并开销,因此应权衡利弊后再决定是否使用[^4]。 --- ### 总结 `mixin` 提供了一种灵活的方式来实现跨组件的代码复用,适用于小型工具函数或者简单逻辑抽取;而 `mixins` 则进一步增强了这一能力,支持一次性引入多个 `mixin`,从而满足更加复杂的开发需求。但在实际工作中需要注意合理规划结构设计,避免因滥用而导致潜在问题的发生。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值