layout: post title: vuex的mapState有三种写法,该怎么用? tags: vue —

在组件调用vuex中的 值,我们一般会这样写:const value = this.$store.state.value

当我们在组件中调用几十个vuex中的值时,这样的写法显得有些重复繁琐。这时候mapstate就能发挥巨大作用了。

mapstate第一种用法:

我们可以在组件内的计算属性中写成下面这个样子:

computed : mapState (["name", "value", "age"])

这种写法适合组件内computed没有计算属性的情况下。原因是如果组件内还有其他计算属性,这样写了,别的计算属性往哪塞?另外一个值得注意的是,如果data数据里面有属性和mapState里面的属性相同的话,组件会优先显示data里面的属性值。

因此,第一种写法仅适用data无重名,无计算属性的组件

mapstate第二种用法:

computed : mapState ({
    storeName : state => state.name
    storeValue : state => state.value
    storeAge : state => state.age
})

第二种写法是第一种写法的升级版,这种写法解决的是data重名属性的问题,这里解决的方式是分别给每个state值重新起名。但有一个缺点,这种写法也是适合组件无计算属性的情况下使用。

因此,第二种写法适合无计算属性的组件使用

mapstate第三种用法:

computed : {
    ...mapState({
    storeName : state => state.name
    storeValue : state => state.value
    storeAge : state => state.age
    }),

    count(){
        ...
    },
}

当我们既想使用mapState,又不想跟data重名,还想给别的计算属性挪地方的话,可以试试第三种写法。

这种写法是第二种写法的升级版,将mapState放到computed计算属性里面,用扩展运算符对mapState进行展开。

这种写法能完美解决上面两种方法带来的不便,data重名不怕、computed也留了空间。

总结:根据不同的组件使用不同的写法能大大提高编程效率,在写代码的过程衡量一下就好了,不必太过纠结哪种写法好与坏