冇事来学系--Vue2.0中vuex(下)

简介: 配置getters对象

配置getters对象

// 与state平级,配置getters对象
const getters = {
  bigSum(state){    // getters对象里设置一个处理函数,state作为形参
    return state.sum*10     // 通过return返回处理后的数据
  }
}
// 在组件中通过vc上的$store中的getters对象,可以获取到处理后的数据
// $store.getters.bigSum就是上面处理后的数据

vuex中的mapState与mapGetters

一个问题:在模板中使用这些数据的时候,都要从vc上的store中的state或者getters中获取,所以模板中会出现大量store中的state或者getters中获取,所以模板中会出现大量storestategettersstore.state,我们可以通过计算属性computed来解决

{{$store.state.sum}}
{{$store.state.school}}
{{$store.state.student}}
// 用计算属性将上面的代码简化
computed: {
  sum(){
    return $store.state.sum
  },
  school(){
    return $store.state.school
  },
  student(){
    return $store.state.student
  }
}
// 这样模板中就可以写的简单一些
{{sum}}
{{school}}
{{student}}

但是,在计算属性computed节点中也很繁琐,这里就可以采用mapState对计算属性进行简化了

mapState方法:用于帮助我们映射state中的数据为计算属性

// 知识回顾---扩展运算符
// 扩展运算符就是在数组/对象的前面加三个点,相当于把数组/对象拆分成了以逗号分隔的参数序列
let obj = {x: 100, y: 200}
let obj1 = {
  a: 1,
  ...obj,
  b: 2
}
// 上面的代码中,会将obj的一组组key: value拆出来放到obj1中

使用mapState方法

<script>
  // 在组件中引入mapState和mapGetters
  import {mapState, mapGetters} from 'vuex'
  export default{
    name: '',
    data(){},
    computed: {
    // 使用mapState方法生成计算属性(对象写法)
    ...mapState({sum: 'sum', schoool: 'school', student: 'student'})
    // 使用mapState方法生成计算属性(数组写法)
    // 当计算属性名 和 data中要获取的数据名字相同时,就可以使用数组形式的写法
    ...mapState(['sum', 'school', 'student'])  
    }
    // mapState({sum: 'sum', schoool: 'school', student: 'student'})
    // 直接使用mapState函数,里面的参数以键值对的形式,传入属性名和state中对应的数据
    // mapState处理的结果是一个对象,里面包含了与传入的属性名 对应的函数
    // 由于computed节点是一个对象,又包裹mapState处理结果的对象,这就造成语法的错误
    // 所以要使用扩展运算符,把mapState返回的对象拆分成参数序列才能放到computed中
  } 
</script>

mapGetters与mapState的使用方法一致


Vuex中的mapActions与mapMutations

与mapState类似,mapMutations是对methods节点内方法的简写

mapMutations用于生成methods节点中的方法,生成的方法中会自动调用commit,提交处理函数到mutations对象

<template>
  <div class="containor">
    <select v-model.number="number">    <!-- 将获取的数据强制转换为number数值型 -->
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="increment(number)">点我+1</button>
    <button @click="decrement(number)">点我-1</button>
    <!-- 使用mapMutations生成事件回调函数,则必须在绑定事件函数的时候传入参数 -->
  </div>
</template>
<script>
  // 在组件中引入mapMutations和mapActions
  import {mapMutations, mapActions} from 'vuex'
   export default{
    name: '',
    data(){
      return {
        number: 1
      }
    },
    methods: {
      // 组件绕过了dispatch给Actions的过程,直接commit给Mutations
      increment(){      
        this.$store.commit('increment', this.number)
      },
      decrement(){      
        this.$store.commit('decrement', this.number)
      }
      // 使用mapMutations生成methods节点中的方法(对象写法)
      // mapMutations函数的形参传入一个对象,key、value分别是methods节点下注册的方法名和提交给mutations对象的方法名
      ...mapMutations({increment: 'increment', decrement: 'decrement'})
     // 注意这种写法没有传递数据this.number,所以要在绑定事件函数的时候传入参数
     // 使用mapMutations生成methods节点中的方法(数组写法)
     // 当methods节点下注册的方法名和提交给mutations对象的方法名一致时,可以用数组简写
     ...mapMutations(['increment', 'decrement'])
    }
   }
</script>

mapActions的用法与mapMutations的用法一致

使用mapActions生成methods节点中的方法,生成的方法会自动调用dispatch,派遣处理函数到actions对象

methods: {
  incrementOdd(){
    this.$store.dispatch('incrementOdd',this.number)
  },
  incrementWait(){
    this.$store.dispatch('incrementWait',this.number)  
  },
  ...mapActions({incrementOdd: 'incrementOdd', incrementWait: 'incrementWait'})
  // 使用mapAcions生成methods节点中的方法(数组写法)
  // 当methods节点下注册的方法名和dispatch派遣给actions对象的方法名一致时,可以用数组简写
  ...mapActions(['increment', 'decrement'])
}
// 同理,在绑定事件的时候得把参数写上,因为mapActions生成methods方法时没有传递this.number
<button @click="incrementOdd(number)">奇数时点我+1</button>
<button @click="incrementWait(number)">点我1s后再+1</button>


目录
相关文章
|
2月前
|
JavaScript
vue尚品汇商城项目-day02【14.vuex状态管理库】
vue尚品汇商城项目-day02【14.vuex状态管理库】
28 0
|
7月前
|
缓存 JavaScript 前端开发
vue灵魂拷问
vue灵魂拷问
60 3
|
JavaScript API
Vue3 小兔鲜:Pinia入门
Vue3 小兔鲜:Pinia入门
95 0
|
JavaScript
VUE第四天
VUE第四天
53 0
|
JavaScript 算法 前端开发
VUE第六天
VUE第六天
84 0
|
移动开发 JavaScript 前端开发
初入了解——什么是VUE
什么是vue 你了解吗?本文章介绍了vue 优缺点
250 0
初入了解——什么是VUE
|
缓存 前端开发 JavaScript
Vue 3.0 这个迷人的小妖精,到底好在哪里?
这几天 Vue 3.0 Beta 版本发布了,本以为是皆大欢喜的一件事情,但是论坛里还是看到了很多反对的声音。主流的反对论点大概有如下几点:
|
存储 JavaScript 前端开发
冇事来学系--Vue2.0中vuex(上)
专门在Vue中实现集中式状态 (数据) 管理的一个Vue插件,对vue中多个组件的共享状态进行集中式的管理(读/写) ,适用于任意组件之间的通信
188 0
|
JavaScript 容器
冇事来学系--Vue2.0中VueComponent(组件)
组件的本质 组件的本质就是一个 构造函数 f VueComponent (options) { this._init(options); } ,是Vue.extend( )生成的 当我们使用组件时,写了组件的标签,Vue解析时就会创建该组件的实例对象,即Vue帮我们执行了这一句代码 new VueComponent(options) (options就是我们写的data、methods、computed等数据) 每次调用Vue.extend( )时,返回的都是一个全新的VueComponent
313 0