state单一状态树的理解/getters理解使用

state单一状态树的理解

在这里插入图片描述

将所有需要管理的信息放到一个store里管理

getters使用详解

可以理解为计算属性。假如我们state里保存的还有其他复杂状态

//共享状态
state: {
  counter: 100,
  student:[
    {id:110,name:'why',age:18},
    {id:112,name:'why2',age:28},
    {id:113,name:'why3',age:38},
    {id:114,name:'why4',age:48}
  ]
},

我们要筛选出年龄小于35的学生,按照以前知识可以有的做法:

使用v-for与v-if
<ul v-for="item in $store.state.student">
  <li v-if="item.age<=35">{{item}}</li>
</ul>

先使用v-for遍历数组,获取每一个sudent对象保存到item中,再进行v-if筛选student.age属性,满足则显示

使用计算属性
computed: {
  moreStudent() {
    return this.$store.state.student.filter(s => {
      return s.age <= 35;
    })
  }
},

计算属性里使用了高阶函数进行筛选。传入一个回调函数,有一个参数s,student这个数组调用的filter函数,会依次遍历这个数组,将每个对象存入s中,每个s都会执行这个回调函数,返会true则会被保存到一个新的数组,如果false忽略该对象。

要使用本地的元素一定不要漏掉this,和直接在html结构里使用是不同的,这两个方法上边就可以不用this,下边就需要。

使用getters

问题是别的地方也需要相同的筛选要求,那就需要将代码拷贝到别处。

vue不是将1就组件开发,抽离思想,这里我们同样要抽离

moreStudent(state) {
  return state.student.filter(s => s.age <= 35)
}

这里箭头函数内部只有一行,且有返回值,可以省略{}和return

这样在其他页面需要赛选状态时,就可以直接调用

<h2>{{$store.getters.moreStudent}}</h2>

getters作为参数和传递参数

比如我们还需要获取到被筛选的人数,当然我们直接使用length也可以,但是我们这里可以将getters作为参数

getters: {
  powerCounter(state) {
    return state.counter * state.counter
  },
  moreStudent(state) {
    return state.student.filter(s => s.age <= 35)
  },
  moreStudentLength(state,getters) {
    return getters.moreStudent.length
  }
},

getters里的方法本身自带有一个state的默认参数,就是state对象,其本身也可以作为参数,我们使用getters参数时获取的就是getters对象本身,可以调用里边所有的方法,包括正在使用getters的方法。有点递归的感觉

如果我们想自定义筛选年龄呢?

moreAgeStudent(state){
  return function (age) {
    return state.student.filter(s => s.age <= age)
  }
}

我们可以在方法内部再返回一个方法,可以接受一个参数作为筛选指标

<h2>{{$store.getters.moreAgeStudent(27)}}</h2>

我们调用时传入的27不是赋值给state,而是age.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值