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日

相关文章

  • vue axios基于常见业务场景的二次封装的实现

    为了更好地在Vue项目中使用axios库,我们可以通过二次封装的方式对axios进行自定义处理,使其更加符合我们项目的实际需求。下面是基于常见业务场景的二次封装步骤及示例说明: 一、安装axios和qs 在使用axios之前,我们需要安装axios和qs两个依赖。axios是一种基于Promise的HTTP客户端,可以用于浏览器和node.js。而qs是一个…

    Vue 2023年5月27日
    00
  • vue跳转页签传参并查询参数的保姆级教程

    下面是关于 Vue 跳转页签传参并查询参数的保姆级教程的详细讲解。 准备工作 首先,您需要确保您的项目中已经安装并且引入了 Vue-Router。 npm install vue-router –save 在您的 main.js 文件中,引入 Vue-Router,新建一个路由实例,并将其传递给 Vue 的实例: import Vue from ‘vue’…

    Vue 2023年5月27日
    00
  • Vue3中vuex的基本使用方法实例

    本文将以「Vue3中vuex的基本使用方法实例」为主题,为大家详细讲解Vue3中vuex的使用方法和操作流程。 先决条件 Vue3和Vuex是本文所需使用的前置知识,如果你还不熟悉这两个技术,你需要先掌握它们。 安装 Vuex 首先,我们需要安装 Vuex 。您可以通过运行以下命令来安装该软件包: npm install vuex@next 创建 Vuex …

    Vue 2023年5月27日
    00
  • Mock.js的安装与使用教程(摆脱后端同学的束缚)

    下面我会详细讲解”Mock.js的安装与使用教程(摆脱后端同学的束缚)”的完整攻略。 1. 简介 Mock.js是一个模拟数据生成器,可以用于前端开发中的接口测试、调试和前后端分离开发。Mock.js提供了丰富的数据类型、生成规则,可以生成符合规范的模拟数据,简化前端开发流程,提高开发效率。 2. 安装 2.1 npm安装 Mock.js是一个npm包,可以…

    Vue 2023年5月28日
    00
  • Vue封装DateRangePicker组件流程详细介绍

    下面我将为你详细讲解Vue封装DateRangePicker组件的流程详细介绍,包含以下步骤: 1. 确定需求 在开始封装之前,需要确定需求。在本例中,我们需要封装一个DateRangePicker组件。这个组件需具有以下特点: 支持选择起始时间和结束时间 支持不同的时间格式 支持自定义样式 支持禁用日期 2. 确定依赖 在确定了需求之后,需要确定依赖。在本…

    Vue 2023年5月29日
    00
  • Vue 页面监听用户预览时间功能的实现代码

    实现Vue页面监听用户预览时间功能的主要思路是利用IntersectionObserver API对页面元素的可见性进行监测,然后根据元素的可见性计算预览时间。下面给出完整的实现步骤: Step 1: 引入IntersectionObserver API。在页面的HTML文件中加入如下代码: <script src="https://poly…

    Vue 2023年5月29日
    00
  • vue中watch监听对象中某个属性的方法

    在Vue中,我们可以使用watch来监听对象中某个属性的变化,并且根据变化做出相应的反应。下面就是如何使用vue中的watch监听对象中某个属性变化的攻略: 创建一个监听对象中某个属性的watch方法 在Vue组件中,我们可以使用watch来监听对象中某个属性的变化。首先,在data中定义一个对象,并在其中初始化属性。 data() { return { u…

    Vue 2023年5月28日
    00
  • vue-cli或vue项目利用HBuilder打包成移动端app操作

    下面就详细讲解一下如何将vue-cli或vue项目通过HBuilder打包成移动端app的操作攻略。 1. 安装HBuilder 首先,我们需要下载并安装HBuilder。HBuilder是一个支持多平台的HTML5开发工具,内置了多款开发框架和常用的UI组件,支持打包成Android和iOS原生应用。 你可以在DCloud官网上下载HBuilder:htt…

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