三、Vuex - Getter

Getter 依赖 state 计算后的数据状态

getter 是从 store 中的 state 中派生出的一些状态, getter 的返回值会根据依赖被缓存起来, 且只有依赖发生改变才会被重新计算.

定义 getters

const store = new Vue.Store({
    state: {
        count: 10
    },
    getters: {
        // 默认 state 作为第一个参数
        doneTodos: state => {
            return "$" + state.count;
        },
        // 也可以接受其他的 getter 作为第二个参数
        todo: (state, getters) => {
            return getter.doneTodos; // $10
        },
        // 通过返回一个函数, 来实现 getter 传参
        getTodo: (state) => {
            return (id) => {
                return state.todos.find(item => item.id === id);
            }
        }
    }
});

访问 Vuex 中的 getter 数据

// 1. 通过属性的方式访问
this.$store.getters.doneTodos; // $10

// 2. 通过方法访问, 每次都会进行调用,不会缓存结果
this.$store.getters.getTodo(2); // 实现了传参

mapGetter 辅助函数

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

import { mapGetters } from 'vuex'

export default {
    computed: {
        // 使用对象扩展运算符将 getter 混入computed 对象中
        ...mapGetters([
            "doneTodos",
            "todo"
        ]),
        // 以对象的形式, 可以取别的名称
        ...mapGetters({
            // 把 this.todoGetter 映射为 this.$store.getters.todo
            "todoGetter": "todo"
        })
    }
}

相关推荐