Vuex核心概念 - actions 和 getters

news2025/3/13 11:34:23

文章目录

  • actions 和 getters
    • 一、actions作用
          • 使用目的:
    • 二、actions的使用
          • 执行原理
          • 代码示例:
    • 三、actions中的辅助函数mapActions
          • 代码示例:
    • 四、核心-getters
          • 1. 什么是getters?
          • 2. getters的作用:
          • 3. 访问 getters 的两种方法:
          • 4. getters的使用:
          • 5. 总结:

actions 和 getters

下面是对actions的基本使用进行一个描述

一、actions作用

Vuex 中的 actions 是用于处理异步操作和提交mutations的函数。
它的功能是在应用程序中执行异步操作,例如发送网络请求、获取数据等,并根据操作的结果来触发mutations进行状态的更改

使用目的:

使用actions的主要目的是将异步逻辑从组件中分离出来,使代码更
加模块化和可维护。它可以帮助我们管理复杂的异步操作流程,并且能够保持状态的一致性。

二、actions的使用

在Vuex中,我们需要先定义一个包含各种action函数的对象,并通过dispatch方法来触发具体的action。每个action函数可以接受一个context对象作为参数,其中包含了store实例中的方法和属性,可以通过context.commit方法来提交mutations,也可以通过context.state访问状态。

执行原理

在这里插入图片描述

代码示例:

第一步:定义actions处理函数

  // 3. actions 处理异步
  // 注意不能直接操作 State ,操作State 还需要 commit mutations
  actions: {
    // context 上下文 (此处未分模块, 可以当成store 仓库)
    // context.commit('mutations名字', 额外参数)
    changeCountAction (context, num) {
      // 这里是setTimeout模拟异步,以后大部分是发请求
      setTimeout(() => {
      //addCount 是 mutations方法里面的
        context.commit('addCount', num)
      }, 1000)
    }
  }

第二步:在组件中使用actions

<button @click="changeCount">1秒改成666</button>

//触发事件,调用方法
    changeCount () {
      // 调用actions  →  dispatch(actions配置对象里面的方法名,额外参数)
      this.$store.dispatch('changeCountAction', 666)
    }

  • 需要注意的是,actions可以通过返回一个Promise来处理异步操作的结果,这样我们可以在组件中使用async/await语法来处理异步流程

三、actions中的辅助函数mapActions

mapActions是将actions中的方法提取出来,映射到组件 methods中。

  • 具体来说,mapActions函数接受一个包含action名称的数组或对象,并返回一个包含对应action方法的对象。这样,在组件中就可以直接使用这些映射后的方法,而无需手动调用this.$store.dispatch来触发actions。
代码示例:
// 在组件中引入mapActions函数
import { mapActions } from 'vuex';

// 在组件中使用mapActions函数映射actions
export default {
  methods: {
    ...mapActions(['fetchData', 'submitData']),
    // 或者使用对象形式进行映射
    ...mapActions({
      fetchData: 'fetchData',
      submitData: 'submitData'
    })
  }
}

在上述示例中,我们首先从vuex模块中导入mapActions函数。然后,在组件的methods选项中使用了…展开运算符来将映射后的action方法添加到组件的方法中。

现在,我们可以在组件的其他地方直接调用fetchData和submitData方法,而不需要手动使用this.$store.dispatch来触发actions的执行。例如:

// 调用映射后的action方法
this.fetchData();
this.submitData();

需要注意的是,映射后的action方法仍然位于组件的作用域内,因此可以像普通的组件方法一样通过this关键字来访问组件的其他属性和方法。

通过使用mapActions函数,我们能够更加方便地在组件中使用actions,并且提高了代码的可读性和维护性。


四、核心-getters

1. 什么是getters?

在Vuex中,getters是一种用于派生状态的核心概念。它类似于组件中的计算属性,允许我们从store中的state中派生出新的状态并将其作为响应式的数据供组件使用。


2. getters的作用:

getters的主要功能是对store中的state进行包装和处理,以提供更高层次的数据访问和操作。通过定义getters,我们可以避免在多个组件中重复编写相同的逻辑,同时实现了数据的封装、复用和独立性。


3. 访问 getters 的两种方法:

① 通过store访问 getters (原生方法)
{{ $store.getters.方法名}}

② 通过辅助函数 mapGetters 映射

computed: {
	...mapGetters(['filterList'])
]
4. getters的使用:
 注意点:
 1. 形参第一个参数,就是 state
 2. 必须有返回值,返回值就是 getters 的值

vuex中:提供数据和函数方法

const store = new Vuex.Store({
  // 开启严格模式(上线需要关闭)
  strict: true,


  // 1.通过state 可以提供 仓库 数据 (所有组件共享的数据)
  state: {
    title: '仓库大标题',
    count: 100,
    list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  },

//使用getters
  getters: {
    // 注意点:
    // 1. 形参第一个参数,就是 state
    // 2. 必须有返回值,返回值就是 getters 的值
    filterList (state) {
      return state.list.filter(item => item > 5)
    }
  }

组件中:使用

    <!-- 原生直接访问 -->
    <div>{{ $store.getters.filterList }}</div>

// 先导入辅助函数
import { mapState, mapMutations, mapActions, mapGetters } from 'vuex'

  computed: {
    // 1、mapState 和 mapGetters 都是在映射属性
    // state辅助函数
    ...mapState(['count']),
    ...mapGetters(['filterList'])
  },


<div>{{ filterList }}</div>
5. 总结:

需要注意的是,由于getters是响应式的,当相关的state发生变化时,getters会自动更新。这意味着,在组件中使用getters时,当所依赖的状态发生变化时,相应的getters也会重新计算。

总结起来,getters是Vuex中用于派生状态并提供数据操作的核心概念。它使得我们能够更方便地获取和处理store中的状态,并提供了一种可复用和响应式的数据访问方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/997657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Compose的一些小Tips - 可组合项的生命周期

系列文章 Compose的一些小Tips - 可组合项的生命周期&#xff08;本文&#xff09; 前言 本系列介绍Compose的一些常识&#xff0c;了解这些tips并不会让人摇身一变成为大佬&#xff0c;但可以帮助到一些学习Compose的安卓开发者避免一些误区&#xff0c;也是对入门详解中遗漏…

python的包管理

要在 mypackage 包外使用 mypackage 包里的 speak.py 文件以及 newpackage 包里的 jump.py 文件&#xff0c;你需要确保以下几个步骤&#xff1a; 确保目录结构正确&#xff0c;如下所示&#xff1a; mypackage/__init__.pyspeak.pynewpackage/__init__.pyjump.py在 speak.py…

解决在cmd中输入mongo出现‘mongo‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件的问题~

当我想通过shell连接mongoDB时&#xff0c;输入mongo命令&#xff0c;出现下述错误&#xff1a; 起初我以为我是忘记配置环境变量了&#xff0c;但检查后发现自己配置了&#xff0c;如果你和我是一样的问题&#xff0c;明明配置了环境变量&#xff0c;但上述问题依然没有被解决…

Go语言的[GPM模型]

在go中,线程是运行Groutine的实体,调度器的功能是把可以运行的Groutine分配到工作线程上 GPM模型 M与P的数量没有绝对的数量关系,当一个M阻塞时,P就会创建一个或者切换到另一个M,所以即使设置了runtime.GOMAXPROCS(1) 也可能创建多个M出来; 当M发现给自己输送G协程的那个P队列为…

懒加载指令实现

问题&#xff1a;页面过长&#xff0c;下面的图片不一定访问到&#xff0c;存在一定浪费。 解决方案&#xff1a;图片懒加载&#xff0c;仅当进入视口区&#xff0c;才发送请求显示图片。 全局指令 // 全局指令 app.directive(指令名称,{mounted(el, binding){// el:指令绑定…

《JUC》万万万万字长文解析!

JUC 四万字长文解析 juc&#xff0c;涵盖线程、内存模型、锁、线程池、原子类、同步器、并发容器、并发编程模式、并发编程应用等。 版本: jdk: 11spring boot: 2.7.0 JUC 是 java.util.concurrent 包的缩写&#xff0c;是 java 提供的用来并发编程的工具包。juc 提供了多种用…

ClickHouse的Join算法

ClickHouse的Join算法 ClickHouse是一款开源的列式分析型数据库&#xff08;OLAP&#xff09;&#xff0c;专为需要超低延迟分析查询大量数据的场景而生。为了实现分析应用可能达到的最佳性能&#xff0c;分析型数据库&#xff08;OLAP&#xff09;通常将表组合在一起形成一个…

MOS管为什么会存在寄生电感

说到MOS管的寄生参数&#xff0c;我们一般都只想到mos管各极间的寄生电容&#xff0c;很少会想到MOS管的寄生电感。 其实分立的MOS管它是存在寄生电感的&#xff0c;并且栅极&#xff0c;源极和漏极都存在。 在一些MOS的数据手册会提到这个寄生电感。 那么MOS管寄生电感是怎么产…

9月4日上课内容 第七章 案例:MHA高可用配置及故障切换

本章结构 案例概述 案例前置知识点 1&#xff0e;什么是 MHA&#xff08;MHA概念&#xff09; MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&…

ComPtr源码分析

ComPtr源码分析 ComPtr是微软提供的用来管理COM组件的智能指针。DirectX的API是由一系列的COM组件来管理的&#xff0c;形如ID3D12Device&#xff0c;IDXGISwapChain等的接口类最终都继承自IUnknown接口类&#xff0c;这个接口类包含AddRef和Release两个方法&#xff0c;分别用…

BUUCTF easyre 1

使用die工具进行文件信息的查看 可以看到是64位程序 使用IDA64打开 f5 反汇编 得到flag

超详细Python第三方库的安装,多图,逐步骤

Python第三方库的安装 前言1. PyCharm中安装模块2. PyCharm终端中命令安装3. 命令行安装4. 命令补充 总结 前言 Python有丰富的第三方库&#xff0c;在Python编程中&#xff0c;经常需要安装第三方库&#xff0c;本文详细介绍了第三方模块/软件包的安装。 提示&#xff1a;大家…

手写Spring:第17章-通过三级缓存解决循环依赖

文章目录 一、目标&#xff1a;通过三级缓存解决循环依赖二、设计&#xff1a;通过三级缓存解决循环依赖2.1 通过三级缓存解决循环依赖2.2 尝试使用一级缓存解决循环依赖 三、实现&#xff1a;通过三级缓存解决循环依赖3.1 工程结构3.2 通过三级缓存解决循环依赖类图3.3 设置三…

Kafka3.0.0版本——消费者(手动提交offset)

目录 一、消费者&#xff08;手动提交 offset&#xff09;的概述1.1、手动提交offset的两种方式1.2、手动提交offset两种方式的区别1.3、手动提交offset的图解 二、消费者&#xff08;手动提交 offset&#xff09;的代码示例2.1、手动提交 offset&#xff08;采用同步提交的方式…

JavaScript-----jQuery

目录 前言&#xff1a; 1. jQuery介绍 2. 工厂函数 - $() jQuery通过选择器获取元素&#xff0c;$("选择器") 过滤选择器&#xff0c;需要结合其他选择器使用。 3.操作元素内容 4. 操作标签属性 5. 操作标签样式 6. 元素的创建,添加,删除 7.数据与对象遍历…

torch.cuda.is_available() 解决方

本人使用的显卡如下&#xff0c;打开任务管理器查看 Anaconda下载哪个版本都可以 使用命令conda create -n pytorch python3.6创建一个名为pytorch的环境&#xff0c;解释器使用3.6的 使用命令conda activate pytorch进入该环境 进入pytorch官网&#xff0c;选择下列选项 复…

九 动手学深度学习v2 ——卷积神经网络之AlexNet

文章目录 AlexNetVGG AlexNet AlexNet新引入dropout、ReLU、maxpooling和数据增强。 VGG VGG神经网络连接 图7.2.1的几个VGG块&#xff08;在vgg_block函数中定义&#xff09;。其中有超参数变量conv_arch。该变量指定了每个VGG块里卷积层个数和输出通道数。全连接模块则与Ale…

超详细最新PyCharm+Python环境安装,多图,逐步骤

PyCharmPython环境安装 前言一、pycharm下载安装1. 安装地址2. 安装详细步骤 二、Python下载安装1. 安装地址2. 安装详细步骤3. 环境变量忘记添加4. python安装成功测试 三. PyCharm上配置Python总结推荐文章 前言 文章会详细介绍PyCharmPython详细安装步骤&#xff0c;接下来…

【数据分享】2012-2023年全国范围的逐月NPP/VIIRS夜间灯光数据

在之前的文章中我们分享了2012-2022年全球范围逐年NPP/VIIRS夜间灯光数据&#xff01;以及2012-2022年中国范围的逐年NPP/VIIRS夜间灯光数据&#xff08;均可查看之前的文章获悉详情&#xff09;很多小伙伴询问有没有逐月的夜间灯光数据。 本次我们分享的是2012-2023年中国范围…

Flask 快速上手教程 — 了解与基本使用

Flask 快速上手教程 — 了解与基本使用 这篇博客是我刚接触 flask&#xff0c;研究文档时的一些记录与体会&#xff0c;希望对各位刚接触 flask 的朋友有所帮助。 且在此篇后&#xff0c;我还会另写一篇关于纯后端的 flask 教程&#xff0c;介绍一下如何使用 flask 创建一个较…