Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该使用mixin还是实用类?_Javascript_Vue.js_Vue Component_Es6 Class - Fatal编程技术网

Javascript 我应该使用mixin还是实用类?

Javascript 我应该使用mixin还是实用类?,javascript,vue.js,vue-component,es6-class,Javascript,Vue.js,Vue Component,Es6 Class,我有一个Vue.js项目,在多个文件中使用一个方法,因此我创建了一个实用程序类来在那里编写此方法,类似于: export class Util{ doSomething(){ return 'something' } } 但我知道我可以用mixin来做,比如: export const myMixin = { methods: { doSomething(){ return 'something' } } } 我应该使用mixin

我有一个Vue.js项目,在多个文件中使用一个方法,因此我创建了一个实用程序类来在那里编写此方法,类似于:

export class Util{
  doSomething(){
    return 'something'
  }
}
但我知道我可以用mixin来做,比如:

export const myMixin = {
   methods: {
     doSomething(){
       return 'something'
     }
   }
}
我应该使用mixin还是实用类


什么时候我应该使用它们中的一个?

如果
doSomething
依赖于组件(它使用某些数据属性,或者依赖于
this.$el
,等等),那么应该考虑将其作为一个mixin来编写


否则,如果它可以在Vue组件之外的其他上下文中使用,请使用实用程序类或函数。如果它只是一个方法,则不需要创建类。您还可以导出函数。

这是一个很好的问题。不幸的是,没有确切的答案,但我将根据自己使用大型Vue代码库的经验提供一些指导

混合

mixin非常适合于您希望在组件之间共享一组相互依赖、无副作用的代码的情况

在我的例子中,我有一个
input
mixin,它定义
props
,一些
数据(输入和错误元素的唯一ID),以及用于发出事件(如
blur
)的方法。这是大约60行代码,否则我必须为九个不同的组件中的每一个重新键入

mixin的好处与传统OOP中继承类的好处类似。即代码重用和复杂性封装

mixin的主要缺点是它会使代码更难阅读。想象一下,六个月后,你又回到了
AppTextArea
组件的工作中,不清楚某些东西是如何工作的,为什么工作的,或者它们是在哪里定义的。。。然后你记得它使用了一个mixin,然后你必须深入到mixin代码中。。。换句话说,它是隐式的,而不是显式的实现

共享功能

共享函数非常适合在应用程序中重用无副作用代码单元的情况

在我的例子中,我有一个
date
库,其中有一个
formatBySlash
函数,它接受一个
date
对象,并返回类似
“5/12/2018”
的内容。我将其添加为全局过滤器,因此可以在模板中执行类似于
{{post.createdAt | formatBySlash}}
的操作。此外,我可以导入函数并直接在方法或计算属性中使用它

共享函数非常灵活,易于测试,并使代码更加明确



总之,我通常建议编写一个共享函数,除非您的用例真的要求它是一个mixin。

取决于doSomething的使用方式。所谓“依赖性”是指一些属性还是变量?我很好奇您如何管理Vue中的业务逻辑。我看到一些mixin课程在打网络电话,我觉得很难闻。我宁愿创建最小依赖性简单es6类,并在那里封装业务逻辑(类似于Angular的服务)。您是否曾经在Mixins中管理过业务逻辑?如何管理Vue应用程序中的业务逻辑?我建议将更复杂的非UI代码移动到与组件分离的文件中。在我的例子中,我有一个
/lib
目录,其中存储了这些函数/类。如果您有需要帮助的特定用例,我建议您打开一个新问题。