因此,我相信标题会介绍我的问题。鉴于您要在要使用mapGetters的每个组件中引入新的依赖关系,因此这会给程序包增加膨胀。
这也意味着您的组件现在已专门绑定到Vue,如果要将组件移植到其他框架(如React)上,这还需要解决。
考虑以下两个计算的属性列表:
import { mapGetters} from 'vuex'
computed: {
...mapGetters({
active:'interface/active',
mode:'interface/mode',
views:'interface/views',
}),
}
vs
computed: {
active:() { return this.$store.getters['interface/active'],
mode:{ return this.$store.getters['interface/mode']},
views:{ return this.$store.getters['interface/views']},
}
当然,后者有点冗长,但没有什么太糟糕的了。在任何一种情况下,您仍然都以相同的方式获得所有的吸气剂数据。这样做似乎完全是不必要的,因为节省几个字符的好处很小。
前一个示例重207B(201个字符)
而后面的示例权重为207B(201个字符)。
对我来说,这意味着节省类型,几乎没有。但是,我确实承认,前者更具可读性,可移植性,并且最终易于维护,因为您的相关数据全都集中在一个位置。
答案 0 :(得分:4)
关于您对辅助功能(例如mapGetters
如果您决定导入vuex
,则说明代码与mapGetters
紧密相关:应澄清的是,直接访问this.$store.getters
的方法不会使您编码少耦合到vuex
的代码。毕竟,这种直接访问确实已经对store
的功能以及它们如何暴露于组件有了很多假设。
以您提供的摘录为例,已经可以看到您的商店实现 a)具有一个名为getters
的概念,而 b)支持模块,因此您可以像定义一个interface
模块一样。
假设有一天,您以某种方式决定将store
的实现方式切换为puex
之类的东西,它完全没有getters
或modules
的概念,您将无论如何都必须重构所有3个声明。甚至即使您决定改用Flure
之类的更高级的工具,也会使您处于类似的情况:尽管Flure具有吸气剂和模块的概念,但它们的公开方式与vuex
不同这样做,因此您必须再次编辑所有3行。
更不用说移植到React了,您在计算属性中拥有的代码甚至无法移植到专门为Vue创建的其他商店库中。因此,实际上,您不必担心使用mapGetters
。
第二,出于节省类型的考虑,如果您仍然不打算重命名这些属性,则您的mapGetters
调用实际上可以简化为单行代码:
computed: {
...mapGetters('interface', ['active', 'mode', 'views']),
}
getters
或state
字段就更容易了)。因此,如果使用得当,这些辅助功能实际上有助于提高可维护性。computed: {
...mapState('interface', ['list', 'packages']),
...mapGetters('interface', ['active', 'mode', 'views']),
...mapGetters('foo', ['bar', 'baz']),
}
第四,关于包装袋的尺寸,第二个想法是,我认为这可能是人们拒绝您的主要原因。因此,我将尝试解释:
您需要了解的是,当今的实际生产Web应用程序使用webpack
之类的构建工具来创建javascript捆绑包。因此,您编写的javascript几乎可以视为source code
,与捆绑销售的代码完全不同。它们之所以如此不同,是因为捆绑软件可以同时使用两种minify
and gzip
技术来实现文件大小的显着改善(实际上通常减小70%以上的大小)。
换句话说,对于如今的Web应用程序,不是按原样提供javascript,而是几乎总是由webpack
之类的东西来处理。因此,您在source code
上进行的所有字符计数都不会对最终捆绑包的大小产生明显的影响。因此,有些人可能会认为您的关注是微优化的一种极差形式,因此他们对此表示反对。
如果我是您,我将尝试尽可能多地包含这些帮助程序功能,并在自动构建优化后 来查看捆绑包的大小,然后再完全不用担心捆绑包的大小。而且即使最终的包大小太大了,您也可以保证mapGetters
重构不会给您带来太大的好处,因为通常其他东西会大大增加包的大小(例如视图组件库,例如)。确实,vuex
上的过早优化确实不值得您麻烦。
因此,对我来说,这些功能(mapState
,mapGetters
,mapActions
,mapMutations
)绝对值得使用。