• 对vue的mixin的理解,有什么应用场景?面试题!!!


    1、mixin是什么?

    Mixin是面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类。Mixin类通常作为功能模块使用,在需要该功能时“混入”,有利于代码复用又避免了多继承的复杂。

    2、Vue中的mixin

    • 官方定义:mixin(混入),提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。
    • 本质其实就是一个js对象,它可以包含我们组件中任意功能选项,如data、components、methods、created、computed等等。
    • 我们只要将共用的功能以对象的方式传入 mixins选项中,当组件使用 mixins对象时所有mixins对象的选项都将被混入该组件本身的选项中来。
    • 在Vue中我们可以局部混入跟全局混入

    2-1、局部混入

    定义一个mixin对象,有组件options的data、methods属性

    var myMixin = {
      created: function () {
        this.hello()
      },
      methods: {
        hello: function () {
          console.log('hello from mixin!')
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    组件通过mixins属性调用mixin对象

    Vue.component('componentA',{
      mixins: [myMixin]
    })
    
    • 1
    • 2
    • 3

    该组件在使用的时候,混合了mixin里面的方法,在自动执行created生命钩子,执行hello方法

    2-2、全局混入

    通过Vue.mixin()进行全局的混入

    Vue.mixin({
      created: function () {
          console.log("全局混入")
        }
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意: 使用全局混入需要特别注意,因为它会影响到每一个组件实例(包括第三方组件)。

    PS:全局混入常用于插件的编写!

    当组件存在与mixin对象相同的选项的时候,进行递归合并的时候组件的选项会覆盖mixin的选项
    但是如果相同选项为生命周期钩子的时候,会合并成一个数组,先执行mixin的钩子,再执行组件的钩子。

    3、应用场景

    在日常的开发中,我们经常会遇到在不同的组件中经常会需要用到一些相同或者相似的代码,这些代码的功能相对独立,这时,可以通过Vue的mixin功能将相同或者相似的代码提出来,举个例子:
    定义一个modal弹窗组件,内部通过isShowing来控制显示

    const Modal = {
      template: '#modal',
      data() {
        return {
          isShowing: false
        }
      },
      methods: {
        toggleShow() {
          this.isShowing = !this.isShowing;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    定义一个tooltip提示框,内部通过isShowing来控制显示

    const Tooltip = {
      template: '#tooltip',
      data() {
        return {
          isShowing: false
        }
      },
      methods: {
        toggleShow() {
          this.isShowing = !this.isShowing;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    通过观察上面两个组件,发现两者的逻辑是相同,代码控制显示也是相同的,这时候mixin就派上用场了

    首先抽出共同代码,编写一个mixin

    const toggle = {
      data() {
        return {
          isShowing: false
        }
      },
      methods: {
        toggleShow() {
          this.isShowing = !this.isShowing;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    两个组件在使用上,只需要引入mixin

    const Modal = {
      template: '#modal',
      mixins: [toggle]
    };
     
    const Tooltip = {
      template: '#tooltip',
      mixins: [toggle]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    通过上面小小的例子,让我们知道了Mixin对于封装一些可复用的功能如此有趣、方便、实用

  • 相关阅读:
    【小嘟陪你刷题15】左叶子之和、二叉树右下角值、路径之和、最大二叉树
    HBase安装,配置,启动,检查
    【升职加薪秘籍】我在服务监控方面的实践(3)-机器监控
    3.3 ss-sp寄存器,栈的push和pop指令
    剑指 Offer 12. 矩阵中的路径
    ChatGLM:向量化构建本地知识库原理
    puppeteer只生成一页pdf的问题
    Redis6笔记04 主从复制,集群,应用问题,Redis6新功能
    kotlin实践笔记
    Java基础知识
  • 原文地址:https://blog.csdn.net/m0_66983971/article/details/126266795