详解Vuex中getters的使用教程

2022-10-14,

在Store仓库里,state就是用来存放数据。如果很多组件都使用这个过滤后的数据,我们是否可以把这个数据抽提出来共享?这就是getters存在的意义。我们可以认为,getters是store的计算属性。本文将具体介绍一下getters的使用教程,需要的可以参考一下

目录
  • 简介
    • 说明
    • 官网
  • getters概述
    • 说明
    • 来源
  • 用法
    • 示例
      • 测试

        简介

        说明

        本文用示例介绍Vuex的五大核心之一:getters。

        官网

        Getter | Vuex

        API 参考 | Vuex

        getters概述

        说明

        getters 是Store的计算属性,可以对State进行计算操作。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

        虽然组件内也可以做计算属性,但getters 可以在多组件之间复用。如果一个状态只在一个组件内使用,可以不用getters。

        来源

        有时我们需要从 store 中的 state 中派生出一些状态,例如对列表进行过滤并计数:

        computed: {
          doneTodosCount () {
            return this.$store.state.todos.filter(todo => todo.done).length
          }
        }
        

        如果有多个组件需要用到此属性,我们要么复制这个函数,或者抽取到一个共享函数然后在多处导入它(无论哪种方式都不是很理想)。getter就是为了解决这个问题而产生的。

        用法

        直接使用

        this.$store.getters.计算属性名           // 不分模块
        this.$store.getters['模块名/计算属性名'] // 分模块
        

        mapGetters

        import { mapGetters } from 'vuex'
        export default {
            computed: {
                // 不分模块
                ...mapGetters(['计算属性名'])
                
                // 分模块,不重命名计算属性
                ...mapGetters('模块名', ['计算属性名'])
                
                // 分模块,重命名计算属性
                ...mapGetters('模块名', {'新计算属性名': '旧计算属性名'})
            }
        }
        

        示例

        代码

        CouterStore.js

        import Vue from 'vue';
        import Vuex from 'vuex';
         
        Vue.use(Vuex);
        const counterStore = new Vuex.Store(
            {
                state: {
                    count: 10
                },
         
                getters: {
                    doubleCount(state) {
                        return state.count * 2;
                    }
                }
            }
        );
         
        export default counterStore;
        

        Parent.vue

        <template>
          <div class="outer">
            <h3>父组件</h3>
            <component-b></component-b>
          </div>
        </template>
         
        <script>
        import ComponentB from "./ComponentB";
         
        export default {
          name: 'Parent',
          components: {ComponentB},
        }
        </script>
         
        <style scoped>
        .outer {
          margin: 20px;
          border: 2px solid red;
          padding: 20px;
        }
        </style>
        

        ComponentB.vue

        <template>
          <div class="container">
            <h3>ComponentB</h3>
            <div>计数器的值:{{thisCount}}</div>
            <div>计数器的2倍:{{thisDoubleCount}}</div>
          </div>
        </template>
         
        <script>
        export default {
          computed:{
            thisCount() {
              return this.$store.state.count;
            },
            thisDoubleCount() {
              return this.$store.getters.doubleCount;
            },
          }
        }
        </script>
         
        <style scoped>
        .container {
          margin: 20px;
          border: 2px solid blue;
          padding: 20px;
        }
        </style>
        

        路由(router/index.js)

        import Vue from 'vue'
        import Router from 'vue-router'
        import Parent from "../components/Parent";
         
        Vue.use(Router)
         
        export default new Router({
          routes: [
            {
              path: '/parent',
              name: 'Parent',
              component: Parent,
            }
          ],
        })
        

        测试

        访问:http://localhost:8080/#/parent

        到此这篇关于详解Vuex中getters的使用教程的文章就介绍到这了,更多相关Vuex getters内容请搜索北冥有鱼以前的文章或继续浏览下面的相关文章希望大家以后多多支持北冥有鱼!

        您可能感兴趣的文章:

        • 记一次vuex的mapGetters无效原因及解决
        • vuex中...mapstate和...mapgetters的区别及说明
        • Vuex中getters和actions的使用补充说明
        • vuex 中辅助函数mapGetters的基本用法详解
        • vuex通过getters访问数据为undefined问题及解决

        《详解Vuex中getters的使用教程.doc》

        下载本文的Word格式文档,以方便收藏与打印。