文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vuex中getters的基本用法解读

2024-04-02 19:55

关注

getters的基本用法解读

一、getter 定义

Vuex允许我们在store中定义"getter" ,用于对state中存储的数据进行过滤操作。

就像vue生命周期中的computed一样,getter的返回值 会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算

二、使用方法

1、通过属性访问

Getter 接受 state 作为其第一个参数:

example:现在需要获取list:[1,2,3,4,5,6,7,8,9]中大于5的元素

const store = new Vuex.Store({
   state:{
       list: [1,2,3,4,5,6,7,8,9]
       } ,
    getters: {
        getNumber: state => {
            retrun state.list.filter(item => item > 5)
        }
    }   
})

在.vue中使用

computed:{
    getNumber(){
        return this.$store.getters.getNumber
    }
}

2、通过方法访问

同样的数组list 需要根据不同的条件返回不同的数据

通过让 getter 返回一个函数,来实现给 getter 传参

const store = new Vuex.Store({
   state:{
       list: [1,2,3,4,5,6,7,8,9]
       } ,
    getters: {
        getNumber: state => (index) => {
            return state.list.filter(item => item > index)
        }
    }   
})

在.vue中使用

computed:{
    getNumber(){
        return this.$store.getters.getNumber(4)
    }
}

3、依赖于已存在的getters

example: 获取list中大于5的数字的个数

注意:如果getters返回的是一个方法,不能用这种方式

const store = new Vuex.Store({
   state:{
       list: [1,2,3,4,5,6,7,8,9]
       } ,
    getters: {
        getNumber: state => {
            return state.list.filter(item => item > 6)
        },
        getNumberLength: (state, getters) = > {
            return getters.getNumber.length
        }
    }   
})

三、mapGetters辅助函数

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

import { mapGetters } from 'vuex'
export default {
  // ...
  computed: {
  // 使用对象展开运算符将 getter 混入 computed 对象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
      // ...
    ])
  }
}

如果你想将一个 getter 属性另取一个名字,使用对象形式:

import { mapGetters } from 'vuex'
export default {
  // ...
  computed: {
    ...mapGetters({
    // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
    doneCount: 'doneTodosCount'
    })
  }
}

四、getters注意事项

1、data中定义的属性名称不能和computed中定义的getter名称相同,否则会报错

2、vuex中state和getter中可以定义同名属性,互不干扰

getters的两种调用方法

getters和state用法相似,有点像vue中里面的data 和computed两个之间的关系

使用:

state: {
        count:0,
    },    
getters:{
        countAdd(state){
            return state.count + 1
        }
    },

方法一

this.$store.getters.xxx 

xxx是getters里面的名称

方法二

import { mapGetters } from 'vuex'
.....
computed:{
    ...mapGetters(['countAdd'])
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯