likes
comments
collection
share

Vue mixins混入

作者站长头像
站长
· 阅读数 15

刚开始使用mixins时,有点区分不开mixins和组件,仔细看了官网内容,并上网查了一些资料,才算搞清楚。

官方描述是混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。mixins是一个js对象,可以包含组件中script项中的任意功能选项,例如data、components、methods、created等。

当多个组件中的数据或功能很相似时,可以利用mixins将公共index部分提取出来,通过mixins封装的函数,组件调用不会改变函数作用域外部的

在src目录下创建一个mixins文件夹,并新建一个index.js文件。以对象的形式来定义index,在该对象中可以和vue组件一样来定义data、components、methods、created、computed等属性,并通过export导出该对象。

export const mixins = {
	componentes: {},
  data() {
  	return {}
  },
  created(){},
  mounted(){},
  computed: {},
  methods: {}
}
在需要调用的组件中引入myMixins.js文件,然后在export default中引入需要的对象即可。
<script>
import { Mixins } from '@/mixins/index.js';
export default {
	mixins: [Mixins]
}
</script>

mixins特点:

1.方法和参数在组件中不共享,虽然组件调用了mixins并将其属性合并到自身组件中来了,但是其属性只会被当前组件所识别并不会被共享,也就是其他组件无法从当前组件中获取到mixins中的数据和方法。

2.引入mixins后组件会对其进行合并,将mixins中的数据和方法扩展到当前组件中来,在合并的过程中如果出现冲突,当出现冲突时:

2.1.值为对象(components、methods、computed、data)的选项,混入组件时选项会被合并,键冲突时优先组件,组件中的键会被覆盖混入对象的。(组件和mixins冲突时,比如说都有age数据和getAge方法,以组件本身的优先

2.2.值为函数(created、mounted)的选项,混入组件时会被合并调用,混合对象里的钩子函数在组件里的钩子函数前调用。(例如,mixins中的created早于组件本身的created调用

与vuex区别

vuex:用来做状态管理的,里面定义的变量在每个组件中均可使用和修改,在任一组件中修改此变量值后,其他组件中此变量的值会随之修改。

mixins:可以定义公共的变量,在每个组件中使用,引入组件后,各个变量是相互独立的,值的修改在组件中不会相互影响,只作用于当前引入的组件中。

与公共组件的区别

组件:在父组件中引入组件,相当于父组件中给出一片独立的空间供自组件使用,然后根据props来传值,但本质上两者是相对独立的

mixins:则是在引入组件之后与组件中的对象和方法进行合并,相当于扩展了父组件的对象和方法,可以理解为形成了一个新的组件