vuex中Getter的用法详解

Vuex中Getter的用法详解

Vuex是Vue.js中使用的状态管理模式。它建立在Vue.js的基础上,提供了中央数据存储库,使得组件之间共享状态变得非常容易。 getter是Vuex中获取状态的一种方法,它可以访问状态的属性并进行某些计算。本篇文章将详细讲解getter的用法。

Getter的定义

在Vuex中使用getter可以获取状态的值并进行计算。在进行计算时,它可以接受一个参数。下面是一个基本的getter的定义:

const store = new Vuex.Store({
  state: {
    items: []
  },
  getters: {
    getItemCount: state => {
      return state.items.length
    }
  }
})

在这个例子中,我们定义了一个名为getItemCountgetter,它返回items数组的长度。

Getter的使用

我们可以在Vue组件中使用getter,以获取状态或者做进一步的计算。在Vue组件中的getter通常是由computed属性实现的。下面是一个例子:

export default {
  name: "ItemList",
  computed: {
    getItemCount() {
      return this.$store.getters.getItemCount
    }
  }
}

在这个例子中,我们在computed计算属性中定义了一个getItemCount计算属性,它通过调用getItemCountgetter并使用$store来获取items数组的长度。

Getter的参数

Getter接受两个参数,第一个参数是state ,第二个参数是其他getter。下面是一个获取所有订单的数量的例子:

const store = new Vuex.Store({
  state: {
    orders: [
      {id: "1", amount: 100},
      {id: "2", amount: 50},
      {id: "3", amount: 75},
      {id: "4", amount: 300}
    ]
  },
  getters: {
    orderCount: state => {
      return state.orders.length
    },
    totalAmount: (state, getters) => {
      let total = 0;
      state.orders.forEach(order => {
        total += order.amount
      })
      return total
    }
  }
})

在这个例子中,我们定义了两个getter, orderCount,用于获取订单的数量,而totalAmount用于获取所有订单的总金额。totalAmount使用state访问订单列表,并使用getters获取orderCount的值。

Getter的缓存

getterstate改变时会重新执行,但是当getter获取的值没有发生变化时,缓存可以避免重新计算。在Vuex中,有两种缓存getter的方法:

  1. 通过修改配置对象:
const store = new Vuex.Store({
  state: { ... },
  getters: {
    ...mapGetters([
      'getItemCount'
    ]),
    // 通过修改配置对象
    getSingleItem: state => {
      return index => {
        return state.items[index]
      }
    }
  },
  // 配置对象
  getters: {
    // enable strict mode (adds overhead!)
    // for dev mode only
    strict: process.env.NODE_ENV !== 'production',
    getSingleItem: state => {
      return index => {
        return state.items[index]
      }
    }
  }
})

在这个例子中,我们定义了名为getSingleItem的getter来获取单个项目。我们希望该getter能够缓存计算结果,以便在state改变时,实现计算结果缓存。此时需要通过修改配置对象,将getSingleItem标识为一个缓存getter。

  1. 通过函数调用实现:
const store = new Vuex.Store({
  state: { ... },
  getters: {
    ...mapGetters([
      'getItemCount'
    ]),
    // 通过函数调用实现
    getSingleItem: (state) => {
      let cache = {};
      return function (index) {
        if (cache[index]) {
          console.log(`get from cache ${index}`);
          return cache[index];
        } else {
          console.log(`compute value ${index}`);
          cache[index] = state.items[index];
          return cache[index];
        }
      }
    }
  }
})

在这个例子中,我们定义了一个名为getSingleItem的getter来获取单个项目。我们使用函数定义这个getter,用一个对象cache来保存计算过的结果。如果getter的计算结果已经存在于缓存中,直接返回缓存的结果。

总结

Getter允许我们在Vuex中获取状态值,并进行一些计算,把计算结果返回给调用方。在使用getter时,可以通过computed属性在Vue组件中获取getter的计算结果。如果getter的计算可能较重,可以通过缓存技术提高性能。

上述就是Vuex中getter的用法详解。通过定义和使用getter,我们可以更好地管理组件的状态,并优化性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vuex中Getter的用法详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 浅谈vuex为什么不建议在action中修改state

    下面为您详细讲解“浅谈vuex为什么不建议在action中修改state”的攻略。 什么是Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 基于 Vue.js 组件树的基础之上提供了一个全局的状态管理机制。 什么是Action Act…

    Vue 2023年5月28日
    00
  • vue通过 API 监听数组的变化

    想要通过 API 监听 Vue.js 中的数组变化,可以使用 Vue 提供的 $watch 和 Vue.set 方法。 1. 使用 $watch 监听数组变化 在 Vue.js 中,可以通过 $watch 方法来监听数组变化。具体步骤如下: 在组件或实例中声明一个数组,例如: js data() { return { list: [“a”, “b”, “c”…

    Vue 2023年5月29日
    00
  • vue插件vue-resource的使用笔记(小结)

    vue插件vue-resource的使用笔记 什么是vue-resource vue-resource是一个Vue.js的插件,它为我们提供了一个服务,用于在Vue.js应用程序中轻松地处理Web API请求和响应。它和jQuery的Ajax非常类似,不过它更适合Vue.js。 安装 npm install vue-resource –save 使用 在V…

    Vue 2023年5月28日
    00
  • Vue监视数据的原理详解

    我给您详细讲解一下“Vue监视数据的原理详解”的完整攻略。 什么是数据监视 在Vue中,我们通常使用数据绑定来显示和更新数据,但是Vue还提供了一个非常重要的功能——数据监视。它可以让我们监视一个数据变化的过程,从而实现对数据的精细处理。 数据监视的原理 Vue通过利用JavaScript的对象的getter和setter方法,来实现对数据的监视。 我们知道…

    Vue 2023年5月28日
    00
  • Vue 2.0学习笔记之Vue中的computed属性

    下面我将为你详细讲解“Vue 2.0学习笔记之Vue中的computed属性”的完整攻略。 什么是computed属性 在Vue组件中,数据是驱动视图变化的,我们可以通过绑定数据到视图的方式达到数据驱动视图的目的。但是,有时候我们需要通过一些计算规则得到一些派生数据来执行视图渲染,此时我们就可以使用computed属性。computed属性可以将计算属性绑定…

    Vue 2023年5月27日
    00
  • vue 重塑数组之修改数组指定index的值操作

    “vue 重塑数组之修改数组指定index的值操作”旨在解决在Vue.js开发中需要操作数组时对于修改指定index的值的需求。 以下是实现这一功能的几个步骤: 步骤1:定义数据 首先,在Vue实例中定义需要操作的数据。我们以一个简单的数组作为例子,使用data属性来定义: data: { items: [‘item1’, ‘item2’, ‘item3’]…

    Vue 2023年5月28日
    00
  • 用electron 打包发布集成vue2.0项目的操作过程

    下面是用Electron打包发布集成Vue2.0项目的操作过程的完整攻略,包括以下步骤: 1. 创建Vue2.0项目 首先,我们需要使用Vue CLI创建一个Vue2.0项目。如果您还没有安装Vue CLI,请先使用以下命令进行安装: npm install -g @vue/cli 然后,使用以下命令创建项目: vue create my-project 其…

    Vue 2023年5月28日
    00
  • vue proxy 的优势与使用场景实现

    Vue Proxy是什么? Vue Proxy是Vue.js提供的一种代理服务器。我们可以使用代理服务器来将网络请求转发到其他URL上,同时也可以拦截请求并对其进行一系列的处理。Vue Proxy的原理是使用Webpack Dev Server实现的。 Vue Proxy的配置需要在webpack的配置文件中进行定义。在使用Vue CLI构建Vue.js项目…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部