Javascript 我应该使用mixin还是实用类?
我有一个Vue.js项目,在多个文件中使用一个方法,因此我创建了一个实用程序类来在那里编写此方法,类似于: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
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
目录,其中存储了这些函数/类。如果您有需要帮助的特定用例,我建议您打开一个新问题。