【Vue3从零开始-第五章】5-1 Mixin混入语法

简介: 【Vue3从零开始-第五章】5-1 Mixin混入语法

]UWOD(KIB9LJS9~S[T{QHM9.png


前言


前面章节的文章中,我们了解了vue里面基础语法、生命周期、指令的使用、动画效果等内容。本章节开始,就一起学习vue的高级语法,今天的文章会学习到Mixin混入语法的内容。


概念


mixin混入:就是将一个对象中的数据、方法通过mixin混入到其他地方。


实例中使用mixin


data


以前的案例中,我们都是在实例或者组件中定义的data函数,使用mixin的时候,我们可以把data函数写进去,然后混入到实例中。


<script>
  const myMixin = {
    data(){
      return {
        num: 111
      }
    }
  }
  const app = Vue.createApp({
    mixins: [myMixin],
    template: `
      <div>
        <div>{{num}}</div>
      </div>
    `
  });
  const vm = app.mount('#root');
</script>
复制代码


11P}]3EF3J@I}HBUS1@61$N.png


在浏览器中会发现实例中模板渲染的num数据值就是mixin中定义的,也就是通过mixin会把数据对象和实例或组件进行合并,vue底层也会在执行template模板编译的时候进行合并执行。


那如果我们在使用mixin的同时,实例中也定义了data,并且数据值都是num,会出现什么情况呢(O_O)?


const app = Vue.createApp({
    data(){
      return {
        num: 22
      }
    },
    mixins: [myMixin],
    template: `
      <div>
        <div>{{num}}</div>
      </div>
    `
});
复制代码


Z$%~M`GNQ}B(7]5_7G3`GXI.png


这时候页面上就会渲染实例中定义的data数据值了。


但是当mixin中定义了实例中没有定义的数据,但是实例中的模板渲染了这个数据,那就又会不一样了。


<script>
  const myMixin = {
    data(){
      return {
        num: 111,
        count: 123
      }
    }
  }
  const app = Vue.createApp({
    data(){
      return {
        num: 22
      }
    },
    mixins: [myMixin],
    template: `
      <div>
        <div>{{num}} - {{count}}</div>
      </div>
    `
  });
  const vm = app.mount('#root');
</script>
复制代码


  • mixin中定义了一个count数据值,但是实例里面没有定义,而是直接在模板中使用了。


Z%BF]4AKO4~$`DI$F%B{O%7.png


组件实例中的data的优先级高于mixin中的data的优先级,如果mixin定义了,而实例中没有定义的,则会使用mixin中的数据。


methods


上面的代码我们知道了mixin中定义data的概念,那如果我们点击按钮触发methods中的方法呢?是不是也会想data函数一样呢?


const myMixin = {
    methods:{
      handleClick(){
        console.log('mixin方法')
      }
    },
  }
const app = Vue.createApp({
    mixins: [myMixin],
    template: `
      <div>
        <button @click="handleClick">按钮</button>
      </div>
    `
});
复制代码


(%_1O_`PCG(R5E@FQV$5L[B.png


当我们点击按钮时,就会执行mixin中定义的methods下面的方法。如果我们同时在实例中定义一个同样的方法会怎样呢?


const app = Vue.createApp({
    mixins: [myMixin],
    methods:{
      handleClick(){
        console.log('实例方法')
      }
    },
    template: `
      <div>
        <button @click="handleClick">按钮</button>
      </div>
    `
});
复制代码


JT%GOGH8`5P2ZG%1Z]G{SI1.png


这时候我们会发现,methods的概念是和data的概念一样的。


组件实例中的methods的优先级高于mixin中的methods的优先级。


生命周期


在vue里面,除了datamethods之外,还有生命周期函数,同样也可以在mixin中定义。


const myMixin = {
    created(){
      console.log('mixin created')
    }
  }
const app = Vue.createApp({
    mixins: [myMixin],
    created(){
      console.log('实例 created')
    },
    template: `
      <div>
        <button>按钮</button>
      </div>
    `
});
复制代码


我们在实例和mixin中都定义了同样的created生命周期函数,执行的效果会怎样呢?


9[0VACI25KD~K}[0ZC`0)(H.png


在页面执行生命周期函数的时候,会先执行mixin中的,然后再执行组件实例中的。


但是在vue3里面不会通过或者说不推荐使用mixin做混入操作,在后面的章节中会讲解compositionAPI或插件时,会和大家一起学习新的内容。


总结


本章节主要讲解了mixin的使用、概念和组件实例的一些运用方式,还有mixin和组件实例的优先级概念。大家一起学习一起加油!!💪🏻

相关文章
|
3天前
|
JavaScript 容器
乾坤qiankun框架搭建 主应用为vue3的项目。
乾坤qiankun框架搭建 主应用为vue3的项目。
19 2
|
3天前
|
JavaScript
vue3 生命周期
【10月更文挑战第14天】vue3 生命周期
|
4天前
|
JavaScript 前端开发
Vue 2 和 Vue 3 之间响应式区别
10月更文挑战第7天
17 2
|
5天前
|
存储 前端开发 中间件
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
27 0
|
5天前
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
92 0
|
2天前
|
JavaScript 前端开发 API
深入探索挖掘vue3 生命周期
【10月更文挑战第10天】
13 0
|
5天前
|
API
vue3中父子组件的双向绑定defineModel详细使用方法
vue3中父子组件的双向绑定defineModel详细使用方法
47 0
|
2天前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
11 3
|
4天前
|
JavaScript 前端开发 开发者
Vue v-for 进阶指南:in 与 of 的区别及应用场景 | 笔记
Vue.js 中的 v-for 是强大的遍历指令,但其中的 in 和 of 关键字往往被开发者忽视。尽管它们的用法相似,但适用的场景和数据结构却各有不同。本文将详细探讨 v-for 中 in 和 of 的区别、适用场景以及在实际开发中的最佳使用时机。通过理解它们的差异,你将能够编写更加高效、简洁的 Vue.js 代码,灵活应对各种数据结构的遍历需求。
40 6
|
2天前
|
缓存 JavaScript
Vue 中 computed 与 method 的区别
【10月更文挑战第15天】computed 和 method 是 Vue 中两个重要的选项,它们在功能和特点上存在着明显的区别。理解并合理运用它们的区别,可以帮助我们构建更高效、更具可维护性的 Vue 应用。在实际开发中,要根据具体情况灵活选择使用,以满足不同的需求。
5 2