mixin是什么?
mixin是vue2和vue3中都有的,一种可以提高代码复用率的方法。它的核心思想是'混入',mixin可以注册在全局使用,也可以在某个页面中引入使用:
比如多个页面都有表格和翻页,翻页需要定义当前页/每页条数/总页数...这些必须的变量,翻页时调用的函数这个必要的函数等等。如果多个页面用到翻页的话,这些变量和方法就需要重复定义;
此时如果用组件,也可以解决,但是props传参如果过多的话可能会比较麻烦,此时如果用mixin,就等于把这一部分公共变量提取出来,在需要的页面直接引入对应的mixin文件后,在原页面里就可以直接调用mixin里定义的变量和方法,他们的关系类似于:
mixin里定义的内容是直接融合进页面1里的,此时页面2如果调用mixin1,也可以直接调用mixin1里定义的内容。如果页面1修改了mixin1里定义的内容,和页面2没有关系,页面2也不会受影响(这是和vuex是不一样的地方)。
一个小栗子展示如何简单的使用mixin
具体实现可以看下面这个例子,比如定义一个页面1和一个页面2,代码分别为:
此时在页面1和页面2中都没有定义mixinValue1/mixinValue2和方法mixinClickMe,但是通过引入mixin文件,将mixin文件中定义的变量和方法融入了页面代码里,点击页面数据就相应的发生了变化:
mixin的大致用法就是这样,上面的例子展示的是在具体页面中引入mixin,并没有说全局引入mixin的情况,想深入的了解可以查阅官网。
使用mixin时需要小心的坑
在实际中,使用mixin虽然可以一定程度上的提取重复代码,帮助减少代码的冗余,但是他也有一些弊端,比如mixin只能用于变量和方法,不能提取重复的html;而且定义的变量名或者方法名容易重复,一旦重复,就会造成一些问题,比如vue在对mixin介绍中有提到:
等等,因此在使用mixin时需要格外小心,尤其是定义变量名时。
不如了解一下组合式API
另外在vue3中,虽然mixin还保留,但是官方更提倡使用组合式API:composition-api,这个虽然是vue3中新提出的,但是据说vue2的项目也可以用插件来实现,有兴趣的可以了解了解。