Vuex之理解Getters的用法

一.什么是getters
在介绍state中我们了解到,在Store仓库里,state就是用来存放数据,若是对数据进行处理输出,比如数据要过滤,一般我们可以写到computed中。但是如果很多组件都使用这个过滤后的数据,比如饼状图组件和曲线图组件,我们是否可以把这个数据抽提出来共享?这就是getters存在的意义。我们可以认为,【getters】是store的计算属性。

二.操作

通过属性访问,通过方法访问:

在store\store.js

import Vue from ‘vue‘
import Vuex from ‘vuex‘
Vue.use(Vuex)

export default new Vuex.Store({
    //创建一个对象来保存应用启动时的初始状态
    state:{
         // 应用启动时, count置为0
        count:0,
        todos: [
            { id: 1, text: ‘水果类‘, done: true },
            { id: 2, text: ‘苹果‘, done: true },
            { id: 3, text: ‘苹果‘, done: false}
        ]
    },
    getters: {
        doneTodos: state => {//通过方法访问
          return state.todos.filter(todo => todo.done)
        },
        doneTodosCount: (state, getters) => {//通过属性访问
            return getters.doneTodos.length
          }
    }
})

vueDome.vue

<template>
    <div>
        <P>通过属性访问:{{doneTodosCount}}</p>
        <P>通过方法访问:{{todos}}</p>
    </div>
</template>

<script>
/*
1.mapState 辅助函数
当映射的计算属性的名称与 state 的子节点名称相同时,
我们也可以给 mapState 传一个字符串数组
*/
import { mapState } from ‘vuex‘
export default {
    computed:{
        todos:function() {  //通过方法访问
            return this.$store.getters.doneTodos;
        },
        doneTodosCount () {
            return this.$store.getters.doneTodosCount
        }
    }
}
</script>

三.mapGetters 辅助函数

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

<template>
    <div>
        <h4>测试1:Count is {{count}}</h4>
        <P>通过属性访问:{{doneTodosCount}}</p>
        <P>通过方法访问:{{doneTodos}}</p>
    </div>
</template>
<script>
import {mapGetters} from ‘vuex‘
export default {
    computed:{
        count(){
            return this.$store.state.count
        },
        ...mapGetters([
            ‘doneTodos‘,
            ‘doneTodosCount‘
        ])
    }
}
</script>

效果同上。分析:1...mapGetters表示// 使用对象展开运算符将 getters 混入 computed 对象中

2.mapGetters里面的都是store.js里面的getters的方法名

原文地址:https://www.cnblogs.com/xtjatswc/p/10324917.html

时间: 2024-10-01 02:49:31

Vuex之理解Getters的用法的相关文章

4.vuex学习之getters、mapGetters

gettters可以理解为计算属性 在store.js中 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) //访问状态对象 const state = { count:1 } const getters = { //vue2.0不要使用箭头函数,getters主要任务就是对状态state对象里面的数据,执行计算后输出 count:function(state){ return state.count+=100 } } exp

面试题:谈谈你对对vuex的理解

当面试官问我们对vuex的理解的时候,我们不能只说"vuex是一个专为vue.js应用程序开发的状态管理模式",尽量不要让面试官连续追问(总会问到自己不会的然后说你实力还差那么点来可以得降薪),应该从三个方面一次性去说清楚: 1.vuex是什么? 2.为什么要用vuex? 3.vuex的核心概念: vuex的属性: vuex的属性传值方式: 对于问题一,我们按官网的描述即可.vuex是一个专为vue.js应用程序开发的状态管理模式,它采用集中式存贮管理应用的所有组件的状态,并以相应的规

深度理解return具体用法

''' 下面我们来更加深度的理解return具体用法!!! return 默认返回None return 可以返回任意数据类型的数据 return 返回多个值的时候,会以元祖的形式把多个值包在一起 ''' '''11111111111111111''' def get_list(): return [1,2,3,4] #返回单个值 lis=get_list() print(lis) #return返回结果是:[1, 2, 3, 4] '''2222222222222222''' def get_

vuex深入理解 modules

一.什么是module? 背景:在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对象,store对象也将对变得非常大,难于管理. module:可以让每一个模块拥有自己的state.mutation.action.getters,使得结构非常清晰,方便管理. 二.怎么用module? 一般结构 const moduleA = { state: { ... }, mutations: { ... }, actions: {

vuex的理解

希望能帮到需要的童鞋. vuex: 单一状态树,用一个对象就包含了全部的应用层级状态.作为项目的唯一一个          数据源ssot存在. state和getters   A. getters可以看作是state的计算属性.但都是写在store中,都是用来存储数据的.    (getters的意义在于,直接在store中对需要的state进行逻辑处理,而不用每个组件引用的时候 都处理一遍)   B. 在组件中都是通过计算属性获取store中的数据,而mapGetters和mapState,

理解学习Func用法

//Func用法 public static class FuncDemo{ public static void TestFunc(){ List<User> usList = Five.GetUserList(); //Select是Func的委托 //public delegate TResult Func<in T,out TResult>(T arg); //out TResult可以自定义输出类型,可以有多少输入in T //usList.Select(new Func

2个简单实例让你快速理解try-catch的用法

相信在实际项目中,你可能经常会看到类似下面的代码 try { // 尝试执行代码块 } catch(err) { // 捕获错误的代码块 } finally { // 结果如何都会执行的代码块 } 简单来说上面的代码是用于处理代码中可能出现的错误信息 try{} 里的代码表示要执行的代码 catch{} 用于捕获 try{} 里代码执行时报的错误信息 finally{} 不管怎样都会执行的代码 下面我会列出一个实例,有时候文字描述不太直观,不便于理解,把相关代码敲一边,试着去理解,或许原先不明白

vuex无法获取getters属性this.$store.getters.getCurChildId undefined

问题描述 this.$store.getters.getCurChildId undefined 这是因为我们设置了命名空间namespaced: true, 在vuex官网中对命名空间的描述如下: 默认情况下,模块内部的 action.mutation 和 getter 是注册在全局命名空间的--这样使得多个模块能够对同一 mutation 或 action 作出响应. 如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块.

Vuex深入理解

store下的index.js: 1 import Vue from 'vue' 2 import Vuex from 'vuex' 3 4 Vue.use(Vuex) 5 6 let store = new Vuex.Store({ 7 state: { 8 count: 100 9 }, 10 mutations: { 11 addIncrement (state, payload) { 12 state.count += payload.n 13 }, 14 deIncrement (st