Vue前端开发-pinia之Actions插件

news/2025/2/6 17:38:21 标签: vue.js, 前端, javascript, 前端框架, 前端开发

Store中的Actions部分,用于定义操作属性的方法,类似于组件中的methods部分,它与Getters都可以操作State属性,但在定义方法时,Getters是对State属性进行加工处理,再返回使用,属于内部计算;Actions则是根据业务逻辑,操作State或Getters保存的值,方法中可以实现异步请求、调用任意的API,属于逻辑层部分。

一、 构建和执行Actions中方法

Actions属于Store中的一部分,因此,可以使用defineStore方法中Actions属性来构建某个业务逻辑,例如:在上一小节10.3.1基础上,构建两个Actions中的方法,一个名称为editCount,用于动态改变count的值,另一个名称为addGrade,用于动态添加grade属性的值,具体实现的代码如下所示:

import { defineStore } from "pinia";
export const schStore = defineStore("sch_id", {
    state: () => {
        return {
            name: "精英学校",
            count: 1200,
            grade: ['小学', '初中']
        }
    },
    getters: {},
    actions: {
        editCount(val) {
            this.count = val;
        },
        addGrade(val) {
            this.grade.push(val);
        }
    }
})

在上述代码的Actions属性加粗部分中,分别定义了两个方法editCount和addGrade,如果方法中需要传入其他参数,可以直接在方法中定义形参,如val,如果需要访问State中的属性,可以通过this对象直接访问属性名即可,如this.count和this.grade。

Actions属性构建完成后,如果需要在其他组件中调用,通常使用mapActions,将它的操作属性映射成组件methods中的一部分,实现代码如下所示:

<script>
import { mapState, mapActions } from 'pinia'
import { schStore } from "../../store/schStore";
export default {
    computed: {
        ...mapState(schStore, ["grade", "count"])
    },
    methods: {
        ...mapActions(schStore, ["editCount", "addGrade"])
    },
    mounted() {
        this.editCount(5);
        console.log(this.count);
        this.addGrade("高中");
        console.log(this.grade);
    }
}
</script>

在上述代码的加粗部分中,先通过导入的mapActions函数,将Actions属性映射成组件methods的成员,接下来,先调用editCount方法,由于传入的实参为5,因此,第一次在控制台输出值为5;再调用addGrade方法,传入实参为“高中”,因此,最后一次在控制台输出的内容为“小学”、“初中”、“高中”字样。

二、执行异步请求

Actions属性中还可以定义执行异步请求的方法,由于异步请求时,无法及时同步State属性值,因此,通常将异步请求的方式使用async和await语句改成同步请求,例如:使用异步请求的方式,修改State中的name属性值,代码如下:

import { defineStore } from "pinia";
import axios from "axios";
export const schStore = defineStore("sch_id", {
    state: () => {
        return {
            name: "精英学校",
            count: 1200,
            grade: ['小学', '初中']
        }
    },
    getters: {},
    actions: {
        async ajaxEditName() {
const res = await axios
.get("http://rttop.cn/api/?day=1-1");
            this.name = res.data;
        }
    }
})

在上述加粗代码中,为了实现异步请求,先导入axios模块,然后在Actions属性中定义一个名称为ajaxEditName的方法,用于发送指定的请求地址,并将请求返回的结果更新name属性值,该方法在组件中调用的代码如下所示:

<script>
import { mapState, mapActions } from 'pinia'
import { schStore } from "../../store/schStore";
export default {
    computed: {
        ...mapState(schStore, ["name"])
    },
    methods: {
        ...mapActions(schStore, ["ajaxEditName"])
    },
    async mounted() {
        console.log(this.name)
        await this.ajaxEditName();
        console.log(this.name)
    }
}
</script>

在上述代码的加粗部分中,先将ajaxEditName方法利用mapActions 函数映射成组件中methods的一个成员,然后在mounted事件中,先输出name的属性值,由于此时还没有更新name值,因此,第一次输出为name的初始值“精英学校”。

当使用await语句执行ajaxEditName方法时,必须等待异步请求完成,并更新name属性值后才能执行下一条输出语句,因此,当第二次执行输出name属性值时,已完成了数据和请求和更新,所以,第二次输出的值为请求返回值“hello”。
在这里插入图片描述


http://www.niftyadmin.cn/n/5843211.html

相关文章

基于微信小程序的医院综合服务平台的设计与实现ssm+论文源码调试

4系统概要设计 4.1概述 本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原…

基于SpringBoot+vue高效旅游管理系统

Spring Boot后端与Vue前端融合&#xff1a;构建高效旅游管理系统 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 Vue的介绍 2.4 mysql数据库介绍 2.5 B/S架构 三、系统功能实现 四、系统项目截图 登录页面 后台管理页面 用户…

为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入

byType找到多种实现类导致报错 Autowired: 通过byType 方式进行装配, 找不到或是找到多个&#xff0c;都会抛出异常 我们在单元测试中无法进行字段注入 字段注入通常是 private 修饰的&#xff0c;Spring 容器通过反射为这些字段注入依赖。然而&#xff0c;在单元测试中&…

在ubuntu下使用ovpn文件连接服务器,并设置开机启动

1. 安装openvpn sudo apt install openvpn2. 将 ovpn 文件拷贝到 /etc/openvpn/client 目录 sudo cp /path/to/your-config.ovpn /etc/openvpn/client/your-config.conf3. 设置开机启动 sudo systemctl enable openvpn-clientyour-config.service4. 启动 sudo systemctl st…

【Elasticsearch】post_filter

post_filter是 Elasticsearch 中的一种后置过滤机制&#xff0c;用于在查询执行完成后对结果进行过滤。以下是关于post_filter的详细介绍&#xff1a; 工作原理 • 查询后过滤&#xff1a;post_filter在查询执行完毕后对返回的文档集进行过滤。这意味着所有与查询匹配的文档都…

10.单例模式 (Singleton Pattern)

单例模式的定义 单例模式&#xff08;Singleton Pattern&#xff09; 是一种创建型设计模式&#xff0c;确保一个类在整个程序生命周期中只能有一个实例&#xff0c;并提供一个全局访问点。 特点&#xff1a; 唯一性&#xff1a;保证系统中某个类只能有一个实例。全局访问点…

【算法篇】贪心算法

目录 贪心算法 贪心算法实际应用 一&#xff0c;零钱找回问题 二&#xff0c;活动选择问题 三&#xff0c;分数背包问题 将数组和减半的最小操作次数 最大数 贪心算法 贪心算法&#xff0c;是一种在每一步选择中都采取当前状态下的最优策略&#xff0c;期望得到全局最优…

十。svm运用

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC # 创建自定义数据集 np.random.seed(42) X…