一文解释mapState的来龙去脉

mapState

Vuex 提供的辅助函数之一,将 store 中的状态映射到组件的计算属性中,使得在组件中可以轻松地访问 Vuex store 中的状态值

  • MapState(映射状态)

在我们的 Count.vue 组件中,可以使用 mapState 来更简洁地获取 count 的状态值

首先,导入 mapState

 import { mapState } from 'vuex'

然后,在 computed 中使用 mapState

 computed: {
 //借助mapState生成计算属性,从state中读取数据 如果是对象的话使用key-value
 // 对象写法 soqi是计算属性名,count是状态名
  ...mapState([suoqi:'count'])
 // 数组写法
   ...mapState(['count'])
 },

数组的写法:

  • count(在计算属性中的名字)是我们在组件中可以使用的计算属性名

  • count(在数组中的字符串)是 Vuex store 中的状态名,从state中读取数据

它们一起简写为['count']了

现在, Count.vue 组件中会有一个名为 count 的计算属性,它会映射到 Vuex store 中的 count 状态,就和我们之前的使用方式一样啦

一文解释mapState的来龙去脉_第1张图片

等同于:

 // 对象写法
 ...mapState({
 //  soqi:'count'
     count: 'count'
   })
 // 普通写法
  suoqi() {
       return this.$store.state.count;
     },
  count() {
     return this.$store.state.count;
   }

总的来说,...mapState(['count']) 让我们可以非常方便地将 Vuex store 中的状态映射到组件中,避免了在每个组件中都需要写一遍 this.$store.state.count 的繁琐代码。

这里的点点点...是用了ES6的对象展开运算符(Spread Operator)语法,给不会的伙伴简单拓展一下

 const obj1 = { a: 1, b: 2, c: 3 };
 const obj2 = { ...obj1, d: 4, e: 5 };
 console.log(obj2);

obj2 是通过将 obj1 中的所有属性展开,再添加额外的属性 de 构建而成的。

在我们之前的讨论中,mapState(['count']) 使用了对象展开运算符将 count 属性从 mapState 返回的数组中提取出来,并将它作为组件的计算属性。

相当于这个过程:

 computed: {
   count() {
     return this.$store.state.count;
   }
 }

没理解的话再拓展一点,mapState(['count']) 返回的是一个包含一个函数的对象,所以...把mapState的这些属性全部展开

 {
   count: function state() {
     return this.$store.state.count;
   }
 }

这样就使得我们可以在组件中以 this.count 的方式方便地访问 Vuex store 中的 count 状态了,和之前的结果效果一样

对您有用的话请点个免费的赞叭,有任何问题都可留言或私信哈~

你可能感兴趣的:(Vue,前端,javascript,开发语言,vue.js)