vuex mapGetters甚至值得使用吗?

时间:2018-10-12 06:11:24

标签: vue.js vuex state-management

因此,我相信标题会介绍我的问题。鉴于您要在要使用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个字符)。

对我来说,这意味着节省类型,几乎没有。但是,我确实承认,前者更具可读性,可移植性,并且最终易于维护,因为您的相关数据全都集中在一个位置。

1 个答案:

答案 0 :(得分:4)

关于您对辅助功能(例如mapGetters

的看法,我认为有几件事值得在这里提及)
  • 如果您决定导入vuex,则说明代码与mapGetters紧密相关:应澄清的是,直接访问this.$store.getters的方法不会使您编码少耦合到vuex的代码。毕竟,这种直接访问确实已经对store的功能以及它们如何暴露于组件有了很多假设。

    以您提供的摘录为例,已经可以看到您的商店实现 a)具有一个名为getters的概念,而 b)支持模块,因此您可以像定义一个interface模块一样。

    假设有一天,您以某种方式决定将store的实现方式切换为puex之类的东西,它完全没有gettersmodules的概念,您将无论如何都必须重构所有3个声明。甚至即使您决定改用Flure之类的更高级的工具,也会使您处于类似的情况:尽管Flure具有吸气剂和模块的概念,但它们的公开方式与vuex不同这样做,因此您必须再次编辑所有3行。

    更不用说移植到React了,您在计算属性中拥有的代码甚至无法移植到专门为Vue创建的其他商店库中。因此,实际上,您不必担心使用mapGetters

  • 第二,出于节省类型的考虑,如果您仍然不打算重命名这些属性,则您的mapGetters调用实际上可以简化为单行代码:

computed: {
  ...mapGetters('interface', ['active', 'mode', 'views']),
}
 
  • 第三,一旦开始包含多行代码,跟踪所有声明(例如,从每个模块公开多少个gettersstate字段就更容易了)。因此,如果使用得当,这些辅助功能实际上有助于提高可维护性。
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上的过早优化确实不值得您麻烦。

因此,对我来说,这些功能(mapStatemapGettersmapActionsmapMutations)绝对值得使用。