vuex之getters使用和传参

除了state之外,有时我们还需要从state中派生出一些状态,这些状态是依赖state的,此时会用到getters

.js文件:

state: {
    list: [1,2,3,4,5,6,7,8,9,10]
}

组件中,需要显示所有大于5的数据,正常的方式,是需要list在组件中进行再一步的处理,但是getters可以帮助我们实现它

**定义getters**

getters: {
    // getters函数的第一个参数是 state
    // 必须要有返回值
     filterList:  state =>  state.list.filter(item => item > 5)
  }

使用getters

.vue文件中

<div>{{ $store.getters.filterList }}</div>

**辅助函数** - mapGetters

.js文件

computed: {
    ...mapGetters(['filterList'])
}

.vue文件

 <div>{{ filterList }}</div>

mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性

但是这里我们并不希望id是写死的,而是应该通过我们传递的值,那我们只要在getter返回的值套上一层函数那我们就可以实现传参数
.js文件代码:

import Vue from 'vue'
import App from './App.vue'
import Vuex from 'vuex'
Vue.config.productionTip = false
Vue.use(Vuex)//相当于调用了install

const store=new Vuex.Store({
  // 实例化Vuex的构造参数 state mutatuons action
  state:{
    // 存储状态
    count:0,
    age:18,
    money:10000,
    list:[1,2,3,4,5,6,7,8,9],
    todos: [
      { id: 1, text: '...', done: true },
      { id: 2, text: '...', done: false }
    ]
  },
  getters:{
    felter(state){
      return state.list.filter(i=>i>5)
    },
    //传参  参数id 用函数接受
    getTodoById(state){
      console.log("进来了")
      return (id)=>state.todos.find(item=>item.id === id)
    }
  },
  mutations:{

  },
  actions:{

  }
})//实例化一个Vuex  

new Vue({
  render: h => h(App),
  store//es6写法   store:store
}).$mount('#app')

.vue代码:

<template>
  <div id="app">
  <div>{{$store.state.count}}</div>
  <div>{{count}}</div> 
  <div>{{$store.getters.felter}}</div>
  <div>{{felter}}</div>
  <div>getTodoById:{{$store.getters.getTodoById(2)}}</div>
  </div>
</template>

<script>
import {mapGetters, mapState} from 'vuex'

export default {
  name: 'App',
  computed:{
    // count(){
    //   return this.$store.count
    // }
    ...mapGetters(['felter']),
    ...mapState(['count','age','money'])
  }
  
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶我起来敲代码啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值