vue前端开发辅助函数状态管理详解示例

 更新时间:2021年10月09日 17:15:54   作者:guoyp2126  
vue的应用状态管理提供了mapState、mapGetters、mapMutations、mapActions四个辅助函数,所谓的辅助函数分别对State、Getters、Mutations、Actions在完成状态的使用进行简化

mapState

当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性。不使用mapState时,获取对象状态,通常放在使用组件的computes属性中,使用方式为:

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

使用mapState可以简化为:

import { mapState } from 'vuex'  //引入mapState对象 
export default {
  // ...
  computed: mapState({
    // 箭头函数可使代码更简练
    count: state => state.count,
  })
}
或者
import { mapState } from 'vuex'  //引入mapState对象 
export default {
  // ...
  computed: mapState({
    'count', //与state名称一致
     countAlias:'count' //countAlias是在引用组件中使用的别名
  })
}

mapGetters

mapGetters 辅助函数仅仅是将 store 中的 getters 映射到局部计算属性,与state类似。由计算函数代码简化为;

import { mapGetters } from 'vuex'
export default {
  // ...
  computed: {
  // 使用对象展开运算符将 getters 混入 computed 对象中
    ...mapGetters([
      'countDouble',
      'CountDoubleAndDouble',
      //..
    ])
  }
}

mapGetters也可以使用别名。

mapMutations

使用 mapMutations 辅助函数将组件中的methods映射为store.commit调用,简化后代码为:

import { mapMutations } from 'vuex'
export default {
  //..
  methods: {
    ...mapMutations([
      'increment' // 映射 this.increment() 为 this.$store.commit('increment')
    ]),
    ...mapMutations({
      add: 'increment' // 映射 this.add() 为 this.$store.commit('increment')
    })
  }
}

mapActions

使用 mapActions 辅助函数将组件的methods映射为store.dispatch调用,简化后代码为:

import { mapActions } from 'vuex'
export default {
  //..
  methods: {
    ...mapActions([
      'incrementN' //映射 this.incrementN() 为 this.$store.dispatch('incrementN')
    ]),
    ...mapActions({
      add: 'incrementN' //映射 this.add() 为 this.$store.dispatch('incrementN')
    })
  }
}

示例

沿用vue状态管理(二)中的示例,使用辅助函数完成。在CountChange和ComputeShow两个组件使用了辅助函数,其余代码无需改动。
在ComputeShow使用了mapState,mapGetters两个辅助函数,代码如下

<template>
  <div align="center" style="background-color: bisque;">
    <p>以下是使用computed直接获取stores中的状态数据,状态数据发生变化时,同步刷新</p>
    <h1>使用computed接收 state:{{ computedState }}</h1>
    <h1>使用computed接收Getters:{{ computedGetters }}</h1>
  </div>
</template>
<script>
  import { mapState,mapGetters } from 'vuex'  //引入mapState,mapGetters对象
  export default {
    name: 'ComputeShow',
    computed:{
    ...mapState({
      computedState:'count'  //别名:computedState
    }),
    ...mapGetters({
      computedGetters:'getChangeValue' //别名:computedGetters
    })
    }
  }
</script>
<style>
</style>

建议使用map时,增加别名,这样就和stores里面内容脱耦。在CountChange使用了mapMutations和mapActions两个辅助函数,代码如下

<template>
  <div align="center">
    <input type="number" v-model="paramValue" />
    <button @click="addNum({res: parseInt(paramValue)})">+增加</button>
    <button @click="subNum">-减少</button>
  </div>
</template>
<script>
  import {
    mapMutations,
    mapActions
  } from 'vuex' //引入mapMutations、mapActions对象
  export default {
    name: 'CountChange',
    data() {
      return {
        paramValue: 1,
      }
    },
    methods: {
      ...mapMutations({
        subNum: 'sub'  //增加别名subNum
      }),
      ...mapActions({
        addNum: 'increment' //映射 this.incrementN() 为 this.$store.dispatch('incrementN')
      })
    }
  }
</script>
<style>
</style>

同样给stores中的方法制定别名,当需要传参数时,通过别名将参数传递给actions或mutations。如:"addNum({res: parseInt(paramValue)})"中传送了一个对象{res:‘'}

小结

辅助函数本身没有新的含义,主要用于简化State、Getters、Mutations、Actions使用时的代码。

以上就是vue前端开发辅助函数状态管理详解示例的详细内容,更多关于vue辅助函数状态管理的资料请关注脚本之家其它相关文章!

相关文章

  • vue.js实现图片压缩封装方法

    vue.js实现图片压缩封装方法

    这篇文章主要介绍了vue.js实现图片压缩封装方法,包括全局main.js引入方法,通过引入imgupload方法结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 超详细的vue组件间通信总结

    超详细的vue组件间通信总结

    作为一个vue初学者不得不了解的就是组件间的数据通信(暂且不谈vuex),通信方式根据组件之间的关系有不同之处,这篇文章主要给大家介绍了关于vue组件间通信的相关资料,需要的朋友可以参考下
    2021-07-07
  • VUE3中Element table表头动态展示合计信息

    VUE3中Element table表头动态展示合计信息

    本文主要介绍了在Vue中实现动态合计两个字段并输出摘要信息的方法,通过使用监听器和深度监听,确保当数据变化时能正确更新合计结果,具有一定的参考价值,感兴趣的可以了解一下
    2024-11-11
  • ElementPlus表格中的背景透明解决方案

    ElementPlus表格中的背景透明解决方案

    最近写大屏,用到elementplus中的el-table,为了让显示效果好看一点,需要把表格的白色背景调整为透明,与整个背景融为一体,本文给大家介绍ElementPlus表格中的背景透明解决方案,感兴趣的朋友一起看看吧
    2023-10-10
  • 解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题

    解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题

    这篇文章主要介绍了解决mpvue + vuex 开发微信小程序 vuex辅助函数mapState、mapGetters不可用问题,需要的朋友可以参考下
    2018-08-08
  • 如何启动一个Vue.js项目

    如何启动一个Vue.js项目

    这篇文章主要介绍了如何启动一个Vue.js项目,对Vue.js感兴趣的同学,可以参考下
    2021-04-04
  • Vue模板语法v-bind教程示例

    Vue模板语法v-bind教程示例

    这篇文章主要为大家介绍了Vue模板语法v-bind教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • vue关于data变量定义的问题

    vue关于data变量定义的问题

    这篇文章主要介绍了vue关于data变量定义的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue3.0+ts引入详细步骤以及语法校验报错问题解决办法

    vue3.0+ts引入详细步骤以及语法校验报错问题解决办法

    Vue 3.0是一个非常流行的JavaScript框架,不仅易于学习和使用,而且可以与许多UI框架集成,下面这篇文章主要给大家介绍了关于vue3.0+ts引入详细步骤以及语法校验报错问题的解决办法,需要的朋友可以参考下
    2024-01-01
  • vue-cli4项目开启eslint保存时自动格式问题

    vue-cli4项目开启eslint保存时自动格式问题

    这篇文章主要介绍了vue-cli4项目开启eslint保存时自动格式的问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论