vuex getters的作用和使用(求平均年龄),以及辅助函数mapGetters

getters作用:派生状态数据

mapGetters作用:映射getters中的数据

使用:

方法名自定义,系统自动注入参数:state,每一个方法中必须有return,其return的结果被该方法名所接收。

  1. 在state中声明数据list

  state: {
    list:[
      {id:1,name:'w1',age:20,score:90},
      {id:2,name:'w2',age:18,score:70},
      {id:3,name:'w3',age:25,score:88},
      {id:4,name:'w4',age:30,score:85}
    ]
  },
  1. 在辅助mapState中加入list

  computed:{
    ...mapState({
    //:左侧为自定义属性名  :右侧为映射到state中的属性名
    students:'list'
  })
  },
  1. 在页面中遍历students数组。(需要在public下的index.html引入bootstrap样式)

 <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
    integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
    <table class="table table-bordered table-hover">
        <thead>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>成绩</th>
            </tr>
        </thead>
        <tbody>
            <tr v-for="item in students" :key="item.id">
                <td>{{ item.id }}</td>
                <td>{{ item.name }}</td>
                <td>{{ item.age }}</td>
                <td>{{ item.score }}</td>
            </tr>
            <tr>
                <td colspan="4">平均年龄:</td>
            </tr>
        </tbody>
    </table>

此时在页面中显示为:

  1. 求平均成绩和总成绩的逻辑思想:

现在数据是在vuex中声明的,所以数据不可修改,且还需其他的值,就得考虑派生了。

在派生中声明一个求平均成绩的avgAge的方法:

  getters: {
    avgAge(state){
      console.log(state);
      return 0
    }
  },

vuex中的getters在组件当中用辅助函数mapGetters来取其值。getters会return结果,所以只能应用在计算属性computed当中。

    ...mapGetters({
      //:左侧为自定义属性名 :右侧映射到getters中的方法名
      avgAge:'avgAge'
    })

在页面当中的引用:

            <tr>
                <td colspan="4">平均年龄:{{ avgAge }}</td>
            </tr>

此时页面上会显示:可以看出,在getters中return的值显示到了页面中

且在控制台输出了list

证明,vuex中getters的返回值我们已经成功拿到了。所以只要在avgAge中计算出结果返回就可以了

平均年龄:总年龄/人数。循环遍历出list中的age数据,加起来就是总年龄。

    avgAge(state){
      let sum=0
      state.list.forEach(item=>{
        sum+=item.age
      })
      return sum/state.list.length
    }

页面结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值