vuex中getters的基本用法解读

 更新时间:2022年09月06日 15:44:13   作者:青浅l  
这篇文章主要介绍了vuex中getters的基本用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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'])
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Vue3和Vite实现对低版本浏览器的兼容

    使用Vue3和Vite实现对低版本浏览器的兼容

    在使用Vite和Vue3构建的JavaScript项目中,确保对低版本浏览器的兼容性是一个重要的考虑因素,以下是一些具体的解决方案和步骤,可以帮助你实现这一目标,需要的朋友可以参考下
    2024-11-11
  • Vue.extend 登录注册模态框的实现

    Vue.extend 登录注册模态框的实现

    这篇文章主要介绍了Vue.extend 登录注册模态框的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解vue-router数据加载与缓存使用总结

    详解vue-router数据加载与缓存使用总结

    这篇文章主要介绍了详解vue-router数据加载与缓存使用总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • vue使用luckyexcel实现在线表格及导出导入方式

    vue使用luckyexcel实现在线表格及导出导入方式

    这篇文章主要介绍了vue使用luckyexcel实现在线表格及导出导入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • vue3 父子组件间相互传值方式

    vue3 父子组件间相互传值方式

    这篇文章主要介绍了vue3 父子组件间相互传值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue3中reactive和ref的实现与区别详解

    vue3中reactive和ref的实现与区别详解

    reactive和ref都是vue3实现响应式系统的api,他们是如何实现响应式的呢,reactive和ref又有什么区别呢,下面小编就来和大家详细讲讲,希望对大家有所帮助
    2023-10-10
  • 一步步教你搭建VUE+VScode+elementUI开发环境

    一步步教你搭建VUE+VScode+elementUI开发环境

    这篇文章主要给大家介绍了关于搭建VUE+VScode+elementUI开发环境的相关资料,近期被配置环境的事情弄得整个人都要炸了,现在整理如下,希望有相同需求的朋友可以不用走弯路,需要的朋友可以参考下
    2023-07-07
  • vue2+tracking实现PC端的人脸识别示例

    vue2+tracking实现PC端的人脸识别示例

    本文主要介绍了vue2+tracking实现PC端的人脸识别示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 基于Vue+Webpack拆分路由文件实现管理

    基于Vue+Webpack拆分路由文件实现管理

    这篇文章主要介绍了基于Vue+Webpack拆分路由文件实现管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Vue用v-for给循环标签自身属性添加属性值的方法

    Vue用v-for给循环标签自身属性添加属性值的方法

    这篇文章主要介绍了Vue用v-for给循环标签自身属性添加属性值的方法,文中大家给大家列举了三种方法 ,需要的朋友可以参考下
    2018-10-10

最新评论