挑战全网最幽默的Vuex系列教程:第五讲 Vuex的小帮手

简介: 前面已经讲完了 Vuex 下的 State、Getter、Mutation 及 Action 这四驾马车,不知道大家是否已经理解。当然,要想真正熟练掌握的话,还是需要不断的练习和动手实践才行。

先说两句


前面已经讲完了 Vuex 下的 StateGetterMutationAction 这四驾马车,不知道大家是否已经理解。当然,要想真正熟练掌握的话,还是需要不断的练习和动手实践才行。


其实只要把这四驾马车完全熟练驾驭了,那么应对一些中小型的项目,基本上就已经没啥问题了,后面的 Module 这架终极马车,其实是为了搞定那些稍微大型复杂一点的项目,避免 store 里面的数据太多,难以管理而设计,这驾马车稍微比较抽象,不太好驾驭,我们下一讲再来详细的去剖解它。


Vue 里面的很多配套设施,在使用体验上一直都追求着简洁,追求着极致,哪里不爽改哪里,所以这也是为什么 Vue 能够长时间深得民心的一个很重要的原因所在。那么这一讲,主要就和大家简单的聊一聊 Vuex 的一些常用的辅助函数。


mapState


通过前面的学习,我们知道,从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态。


那么,当一个组件需要获取多个状态的时候,怎么办?是不是这样:


export default {
  ...
  computed: {
      a () {
        return store.state.a
      },
      b () {
        return store.state.b
      },
      c () {
        return store.state.c
      },
      ...
   }
}


当然,这样是没问题的,但是总感觉写起来很难受,看起来更难受是吧!既然这么容易我们就感受到了,Vuex 能感受不到吗,能忍得了吗?


绝对不能忍,所以 mapState 辅助函数被创造了出来,用来搞定这个人人为之咬牙切齿的痛点。


// 在单独构建的版本中辅助函数为 Vuex.mapState
import { mapState } from 'vuex'
export default {
  // ...
  computed: mapState({
    // 箭头函数可使代码更简练
    a: state => state.a,
    b: state => state.b,
    c: state => state.c,
    // 传字符串参数 'b'
    // 等同于 `state => state.b`
    bAlias: 'b',
    // 为了能够使用 `this` 获取局部状态
    // 必须使用常规函数
    cInfo (state) {
      return state.c + this.info
    }
  })
}


通过上面的示例,可以了解到,我们可以直接把需要用到的状态全部存放在 mapState 里面进行统一管理,而且还可以取别名,做额外的操作等等。


如果所映射的计算属性名称与 state 的子节点名称相同时,我们还可以更加简化,给 mapState 传一个字符串数组:


computed: mapState([
  // 映射 this.a 为 store.state.a
  'a',
  'b',
  'c'
])


因为 computed 这个计算属性接收的是一个对象,所以由上面的示例代码可以看出,mapState 函数返回的是一个对象,现在如果想要和局部的计算属性混合使用的话,可以使用 ES6 的语法这样写来大大简化:


computed: {
  localComputed () { 
    ...
  },
  // 使用对象展开运算符将此对象混入到外部对象中
  ...mapState({
    // ...
  })
}


了解了 mapState 辅助函数后,接下来的几个辅助函数的用法也基本上都差不多了,我们继续往下看。


mapGetters


这个和 mapState 基本上没啥区别,简单看下官方的例子,就懂了:


import { mapGetters } from 'vuex'
export default {
  // ...
  computed: {
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
      // ...
    ])
  }
}


取个别名,那就用对象的形式,以下示例的意思就是把 this.doneCount 映射为 this.$store.getters.doneTodosCount


mapGetters({
  doneCount: 'doneTodosCount'
})


mapMutations


直接看示例代码:


import { mapMutations } from 'vuex'
export default {
  // ...
  methods: {
    ...mapMutations([
      // 将 `this.increment()` 映射为 
      // `this.$store.commit('increment')`
      'increment', 
      // `mapMutations` 也支持载荷:
      // 将 `this.incrementBy(amount)` 映射为 
      // `this.$store.commit('incrementBy', amount)`
      'incrementBy' 
    ]),
    ...mapMutations({
      // 将 `this.add()` 映射为 
      // `this.$store.commit('increment')`
      add: 'increment' 
    })
  }
}


简直不要太好用,连载荷也可以直接支持。


mapActions


mapMutations 用法一模一样,换个名字即可。


import { mapActions } from 'vuex'
export default {
  // ...
  methods: {
    ...mapActions([
      // 将 `this.increment()` 映射为 
      // `this.$store. dispatch('increment')`
      'increment', 
      // `mapActions` 也支持载荷:
      // 将 `this.incrementBy(amount)` 映射为 
      // `this.$store. dispatch('incrementBy', amount)`
      'incrementBy' 
    ]),
    ...mapActions({
      // 将 `this.add()` 映射为 
      // `this.$store. dispatch('increment')`
      add: 'increment' 
    })
  }
}


想要在组件中调用,直接this.xxx 就完了。


写在最后


不得不说,Vuex 在使用体验上面真的是用心良苦,用好这些辅助函数,将会大大增加我们的开发效率,当然,有任何问题,欢迎留言,咱们一起交流。


转载声明


作者:大宏说  链接:www.jianshu.com/p/c9b8bbaca…


相关文章
|
3月前
|
JavaScript API
再不学vue3就没有人要你了!速来围观vue3
这篇技术文章介绍了作者从最初对学习 Vue3 抵触到最终决定投入学习的心路历程,展示了 Vue3 相较于 Vue2 的诸多改进和新特性,如更优的性能、更小的代码体积及更佳的 TypeScript 支持。文章重点阐述了 Vue3 中 createApp 的使用变化、emits 机制、多事件处理、Fragment 的引入等重要功能升级。此外,还深入探讨了 Composition API 和 Options API 的区别,强调 Composition API 在代码组织和逻辑复用方面的优势,并给出了在不同项目规模中选择合适 API 的建议。
37 0
|
3月前
|
JavaScript API
卷死了!再不学vue3就没有人要你了!速来围观vue3新特性
该文章强调了学习Vue3的重要性,并详细介绍了Vue3相较于Vue2的新特性与改进,包括Composition API、响应式系统的变化以及其他API的更新等内容。
|
4月前
|
存储 JavaScript
Vuex 最佳实践:借势技术热点,打造 Vue 应用的可维护与可扩展之梦,你还在等什么?
【8月更文挑战第27天】Vuex是Vue.js的状态管理工具,适用于复杂应用的状态集中管理,使状态变更更为清晰、可预测及易维护。其核心特点包括:利用单一状态树来集中存放应用所有状态,便于追踪变化并简化管理;通过模块划分对大型应用进行拆分,以增强代码可维护性并明确各模块职责;借助命名空间防止模块间命名冲突;启用严格模式确保状态变更只能通过mutations进行,提升代码质量。示例代码展示了商品和购物车模块的定义与使用,说明如何在Vue组件中调用Vuex的状态和操作。
40 0
|
7月前
|
前端开发 JavaScript 大数据
❤️[前端学习]大数据全栈工程师之一文快速上手vue3❤️
❤️[前端学习]大数据全栈工程师之一文快速上手vue3❤️
89 0
|
缓存 JavaScript 前端开发
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
1369 0
【前端架构必备】手摸手带你搭建一个属于自己的脚手架
|
前端开发 JavaScript 小程序
react技术问题十问十答
react技术问题十问十答
92 0
|
JavaScript
Vue回炉重造之搭建考试答卷系统
答题过程中,防止用户中途退出或者其他不可抗力因素阻碍答题,在每次选择都要请求下接口(接口状态为未交卷,只是保存用户的答题进度)。 选择答题区与答题卡必须同步,另外右侧的进度条也是同步的。
|
监控 前端开发 Devops
微前端热度不再?qiankun 作者有话说
微前端热度不再?qiankun 作者有话说
334 0
|
存储 缓存 JavaScript
小白学前端之TypeScript使用Vuex 4.0|8月更文挑战
官方介绍:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
204 0
|
前端开发
前端工作总结173-vuex很强大
前端工作总结173-vuex很强大
77 0
前端工作总结173-vuex很强大