冇事来学系--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>


目录
相关文章
|
安全 Windows
Win10/Win11如何获取最高管理员权限
Win10/Win11如何获取最高管理员权限
3981 0
|
SQL 关系型数据库 MySQL
Kratos微服务与它的小伙伴系列 - ORM框架 - Ent
ent 是Facebook开源的一个简单但是功能强大的ORM框架,它可以轻松构建和维护具有大型数据模型的应用程序。它基于代码生成,并且可以很容易地进行数据库查询以及图遍历。
2264 0
|
存储 Web App开发 前端开发
Sentry For React 完整接入详解(2021 Sentry v21.8.x)前方高能预警!三万字,慎入!(二)
Sentry For React 完整接入详解(2021 Sentry v21.8.x)前方高能预警!三万字,慎入!(二)
1019 0
|
负载均衡 监控 Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
|
监控 网络协议 安全
2023年最新整理的中兴设备命令合集,网络工程师收藏!
2023年最新整理的中兴设备命令合集,网络工程师收藏!
1402 0
|
存储 Cloud Native 数据挖掘
hologres
Hologres 是阿里云推出的一款云原生的数据仓库产品,它可以提供 PB 级别的海量数据存储和实时查询,同时支持高并发和弹性扩展。Hologres 可以帮助企业快速构建数据仓库和数据湖,为数据分析和挖掘提供强大的支持。
1017 3
|
搜索推荐 应用服务中间件 nginx
typecho joe主题优化日志
博主使用了typecho进行博客网站的建立,也进行了一定程度上的修改优化。可从本文看到一系列美化方法。配置为 typecho1.2 php7.4
502 0
typecho joe主题优化日志
|
域名解析 网络协议 分布式数据库
IP、域名和DNS的关系与区别是什么?
IP、域名和DNS的关系相辅相成
1135 0
IP、域名和DNS的关系与区别是什么?
|
存储 机器学习/深度学习 传感器
【VRP问题】基于头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题附matlab代码
【VRP问题】基于头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题附matlab代码

热门文章

最新文章