在Vue中,mixins(混入)是一种用于分发Vue组件中可复用功能的灵活机制。它们允许你抽取组件中的共享功能,如数据、计算属性、方法、生命周期钩子等,并将其作为单独的模块复用到多个组件中。这种方式有助于保持代码的DRY(Don't Repeat Yourself)原则,提高可维护性和可读性。

基本概念

混入(Mixins)本质上是一个含有组件选项的对象。当你将一个混入对象混入一个组件时,该混入对象的属性将会被“混合”到组件自身的选项中。如果混入对象和组件定义了相同的属性(如datamethods等),那么这些属性会被合并。对于data对象,Vue执行的是浅合并,而对于其他如methodscomputed等,则是直接扩展。

使用方式

局部混入

可以在单个组件中使用混入,这称为局部混入。

// 定义一个混入对象
const myMixin = {
data() {
return {
message: 'Hello from mixin!'
}
},
methods: {
myMethod() {
console.log('This is a method from mixin.');
}
}
} // 在组件中使用混入
export default {
mixins: [myMixin], // 使用数组形式,可以同时应用多个混入
mounted() {
this.myMethod(); // 调用混入的方法
console.log(this.message); // 输出混入的数据
}
}
全局混入

你也可以将混入应用于Vue的原型上,这样它会影响到所有创建的Vue实例。

// 全局注册混入
Vue.mixin({
created() {
console.log('Global mixin - every component will run this when created.');
}
});

注意:全局混入应谨慎使用,因为它们会影响到每个Vue组件,可能导致意料之外的行为,尤其是在引入外部库或大型项目中。

混入的合并策略

  • 数据(data):如果混入和组件都定义了data,Vue会通过Vue.util.extend()执行浅拷贝来合并对象,这意味着如果数据对象中有引用类型(如数组或对象),它们会被共享,而不是复制。
  • 方法(methods)、生命周期钩子等:简单地将混入对象中的属性添加到组件的相应集合中。
  • 生命周期钩子:如果有多个混入或组件自身都定义了同一生命周期钩子,这些钩子函数将按顺序调用(组件自身定义的钩子函数总是在最后调用)。

注意事项

  • 混入可以提供强大的代码复用能力,但过度使用可能导致组件行为难以追踪。
  • 当多个混入包含相同属性时,最后一个混入的属性值将优先。
  • 使用混入时,明确其用途和潜在的冲突,合理规划和组织代码结构。

Vue学习:21.mixins混入的更多相关文章

  1. Vue mixins(混入)

    建立一个公共组件,然后对该组件进行混入继承. 注意会走两个生命周期,谨慎使用 mixins混入,相当于生成new 组件:组件引用,相当与在父组件内开辟了一块单独的空间 mixins适用于,两个有非常相 ...

  2. _ 下划线 vue mixins 混入 变量前有下划线 变量不起作用

    _ 下划线 vue mixins 混入 变量前有下划线 变量不起作用

  3. VUE学习-mixin混入

    mixin混入 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能. 组件式混入 // 定义一个混入对象 var myMixin = { created: functi ...

  4. VUE学习笔记(李天禹老师版本)

    目录 VUE 一 脚手架文件结构 二 关于不同版本的Vue 三 vue.config.js配置文件 vue文件的基本结构 components 四 ref属性 TIPS 五 props配置项 Tips ...

  5. 从零开始的vue学习笔记(六)

    混入 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.简单解释就是把一个Vue组件中的内容提供给别的组件来用.例子: // 定义一个混入对象 var myMixin ...

  6. Vue.js 2.x 混入

    Vue.js 2.x mixins 混入 混入(mixins)是一种分发vue组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身 ...

  7. Vue学习笔记-Django REST framework3后端接口API学习

    一  使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7  (Windows x86- ...

  8. Vue学习之--------Vue中自定义插件(2022/8/1)

    文章目录 1.插件的基本介绍 2.实际应用 2.1 目录结构 2.2 代码实例 2.2.1 学校组件(School.vue) 2.2.2 学生组件(Student.vue) 2.2.3 定义的插件 2 ...

  9. Vue学习笔记-2

    前言 本文非vue教程,仅为学习vue过程中的个人理解与笔记,有说的不正确的地方欢迎指正讨论 1.computed计算属性函数中不能使用vm变量 在计算属性的函数中,不能使用Vue构造函数返回的vm变 ...

  10. Vue学习笔记-1

    前言 本文不是Vue.js的教程,只是一边看官网Vue的教程文档一边记录并总结学习过程中遇到的一些问题和思考的笔记. 1.vue和avalon一样,都不支持VM初始时不存在的属性 而在Angular里 ...

随机推荐

  1. HarmonyOS NEXT应用开发之图片缩放效果实现

    介绍 图片预览在应用开发中是一种常见场景,在诸如QQ.微信.微博等应用中均被广泛使用.本模块基于Image组件实现了简单的图片预览功能. 使用说明: 双指捏合缩放图片大小 双击图片进行图片的大小切换 ...

  2. Spring Cloud Stream 体系及原理介绍

    简介: Spring Cloud Stream在 Spring Cloud 体系内用于构建高度可扩展的基于事件驱动的微服务,其目的是为了简化消息在 Spring Cloud 应用程序中的开发. 作者 ...

  3. 浅谈RSocket与响应式编程

    ​简介: RSocket是高效一个二进制的网络通讯协议,能够满足很多场景下使用.另外,RSocket也是一个激进的响应式捍卫者,激进到连API都跟响应式无缝集成.本文我们将和大家分享RSocket与响 ...

  4. [PHP] 浅谈 Laravel Authorization 的 gates 与 policies

    首先要区分 Authentication 与 Authorization,认证和授权,粗细有别. 授权(Authorization) 有两种主要方式,Gates 和 Policies. Gates 和 ...

  5. Rust中的并发性:Sync 和 Send Traits

    在并发的世界中,最常见的并发安全问题就是数据竞争,也就是两个线程同时对一个变量进行读写操作.但当你在 Safe Rust 中写出有数据竞争的代码时,编译器会直接拒绝编译.那么它是靠什么魔法做到的呢? ...

  6. Kimi:文本解析利器,你相信光么?

    缘起 第一次接触 kimi 是在微信群,开始以为是推广薅羊毛产品,后来在其他渠道也了解到 kimi,据说是"国产之光".我知道很多同学苦不能使用魔法久矣,索性就先踩踩这个" ...

  7. SAP Adobe Form 教程一 简单示例

    马上需要用到adobe form,这里搬运一篇教程学习下. 英文原文:SAP Adobe Interactive Form Tutorial. Part I. First Adobe Form 本文链 ...

  8. 简说Python之ipython的pdb调试

    目录 简说Python之ipython 1.安装ipython 2.ipython的使用 3.ipython的debug调试. 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟 ...

  9. github无法push?看这篇文章就够了

    参考文章: https://mp.weixin.qq.com/s/56Dp3pM0BMyH2GZMGEsmCQ

  10. spring boot整合maybatis plus 的 文件生成代码

    /** * 代码生成 */public class AutoGenerator_ { public static void main(String[] args) { AutoGenerator ge ...