Vue前端開發-pinia之Actions插件

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.pswp.cn/web/68065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/68065.shtml
英文地址,請注明出處:http://en.pswp.cn/web/68065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

生成式AI安全最佳實踐 - 抵御OWASP Top 10攻擊 (下)

今天小李哥將開啟全新的技術分享系列&#xff0c;為大家介紹生成式AI的安全解決方案設計方法和最佳實踐。近年來生成式 AI 安全市場正迅速發展。據IDC預測&#xff0c;到2025年全球 AI 安全解決方案市場規模將突破200億美元&#xff0c;年復合增長率超過30%&#xff0c;而Gartn…

一個開源 GenBI AI 本地代理(確保本地數據安全),使數據驅動型團隊能夠與其數據進行互動,生成文本到 SQL、圖表、電子表格、報告和 BI

一、GenBI AI 代理介紹&#xff08;文末提供下載&#xff09; github地址&#xff1a;https://github.com/Canner/WrenAI 本文信息圖片均來源于github作者主頁 在 Wren AI&#xff0c;我們的使命是通過生成式商業智能 &#xff08;GenBI&#xff09; 使組織能夠無縫訪問數據&…

JAVA架構師進階之路

JAVA架構師進階之路 前言 苦于網絡上充斥的各種java知識&#xff0c;多半是互相抄襲&#xff0c;導致很多后來者在學習java知識中味同嚼蠟&#xff0c;本人閑暇之余整理了進階成為java架構師所必須掌握的核心知識點&#xff0c;后續會不斷擴充。 廢話少說&#xff0c;直接上正…

java程序員面試自身優缺點,詳細說明

程序員面試大廠經常被問到的Java異常機制問題,你搞懂了嗎運行時異常:運行時異常是可能被程序員避免的異常。與檢查性相反,運行時異常可以在編譯時被忽略。錯誤(ERROR):錯誤不是異常,而是脫離程序員控制的問題。錯誤通常在代碼中容易被忽略。例如:當棧溢出時,一個錯誤就發生了,它…

C++六大默認成員函數

C六大默認成員函數 默認構造函數默認析構函數RAII技術RAII的核心思想優點示例應用場景 默認拷貝構造深拷貝和淺拷貝 默認拷貝賦值運算符移動構造函數&#xff08;C11起&#xff09;默認移動賦值運算符&#xff08;C11起&#xff09;取地址及const取地址操作符重載取地址操作符重…

Java 2024年面試總結(持續更新)

目錄 最近趁著金三銀四面了五六家公司吧&#xff0c;也整理了一些問題供大家參考一下&#xff08;適合經驗三年左右的&#xff09;。 面試問題&#xff08;答案是我自己總結的&#xff0c;不一定正確&#xff09;&#xff1a; 總結&#xff1a; 最近趁著金三銀四面了五六家公…

防火墻的安全策略

1.VLAN 2屬于辦公區;VLAN 3屬于生產區&#xff0c;創建時間段 [FW]ip address-set BG type object [FW-object-address-set-BG]address 192.168.1.0 mask 25 [FW]ip address-set SC type object [FW-object-address-set-SC]address 192.168.1.129 mask 25 [FW]ip address-se…

工作流項目BPMN.JS_Question梳理

工作流項目 想了解如果候選人熟悉工作流技術、bpmn.js和Flowable工作流引擎&#xff0c;面試官會對哪些信息感興趣。我需要分析這個問題&#xff0c;并給出一個全面而結構化的回答。 首先&#xff0c;用戶可能希望了解作為前端面試官&#xff0c;應該關注候選人哪些方面的知識和…

windows下搭建鴻蒙OS應用開發環境

一、前言 HUAWEI DevEco Studio 是華為推出的一款集成開發環境&#xff08;IDE&#xff09;&#xff0c;主要用于開發基于華為鴻蒙操作系統&#xff08;HarmonyOS&#xff09;的應用。作為華為開發者工具的核心之一&#xff0c;DevEco Studio 提供了一個多功能的開發平臺&…

MacBook Pro(M1芯片)Qt環境配置

MacBook Pro&#xff08;M1芯片&#xff09;Qt環境配置 1、準備 試圖寫一個跨平臺的桌面應用&#xff0c;此時想到了使用Qt&#xff0c;于是開始了搭建開發環境&#xff5e; 在M1芯片的電腦上安裝&#xff0c;使用brew工具比較方便 Apple Silicon&#xff08;ARM/M1&#xf…

Sqlserver DBCC Check 遇到Msg 3853報錯涉及sys.columns和sys.objects信息不匹配的解決方法

對數據庫CacheDBMSIntl執行DBCC checkcatalog(‘CacheDBMSIntl’)時遇到報錯如下 Msg 3853, Level 16, State 1, Line 7 Attribute (object_id1071830442) of row (object_id1071830442,column_id1) in sys.columns does not have a matching row (object_id1071830442) in sy…

VUE之組件通信(二)

1、v-model v-model的底層原理&#xff1a;是:value值和input事件的結合 $event到底是啥&#xff1f;啥時候能.target 對于原生事件&#xff0c;$event就是事件對象 &#xff0c;能.target對應自定義事件&#xff0c;$event就是觸發事件時&#xff0c;所傳遞的數據&#xff…

P2036 [COCI 2008/2009 #2] PERKET(dfs)

#include<bits/stdc.h> using namespace std;int n; int a[15],b[15]; int ansINT_MAX; // 初始化最小差值為一個很大的數&#xff0c;保證能找到最小值void dfs(int i,int s,int k){if(in){ // 當遍歷完所有元素時if(s1&&k0) return;int difabs(s-k);ans mi…

論文解讀:《基于TinyML毫米波雷達的座艙檢測、定位與分類》

摘要 本文提出了一種實時的座艙檢測、定位和分類解決方案&#xff0c;采用毫米波&#xff08;mmWave&#xff09;雷達系統芯片&#xff08;SoC&#xff09;&#xff0c;CapterahCAL60S344-AE&#xff0c;支持微型機器學習&#xff08;TinyML&#xff09;。提出了波束距離-多普勒…

ORB-SLAM2源碼學習:KeyFrame.cc④: void KeyFrame::UpdateBestCovisibles更新最佳共視

前言 在添加新連接之后就要重新對所有的共視關鍵幀和權重的那兩個列表重新進行降序排列&#xff0c;這樣非常容易知道列表的第一位就是最佳共視關鍵幀和權重。 總的來說就是只要權重發生了變化就要調用這個函數來修改mvpOrderedConnectedKeyFrames共視關鍵幀和mvOrderedWeigh…

尚硅谷課程【筆記】——大數據之Shell【一】

課程視頻&#xff1a;【【尚硅谷】Shell腳本從入門到實戰】 一、Shell概述 為什么要學習Shell&#xff1f; 1&#xff09;需要看懂運維人員的Shell程序 2&#xff09;偶爾編寫一些簡單的Shell程序來管理集群、提高開發效率 什么是Shell&#xff1f; 1&#xff09;Shell是一…

ES6 對象擴展:對象簡寫,對象屬性 表達式,擴展運算符 ...,Object.assign,Object.is,用法和應用場景

1. 對象屬性簡寫 1.1 基本語法 // 傳統寫法 const name John; const age 25; const user {name: name,age: age };// ES6 簡寫語法 const user {name,age };1.2 實際應用場景 // 1. 函數返回對象 function createUser(name, age, email) {return {name,age,email}; }// …

【2025】camunda API接口介紹以及REST接口使用(3)

前言 在前面的兩篇文章我們介紹了Camunda的web端和camunda-modeler的使用。這篇文章主要介紹camunda結合springboot進行使用&#xff0c;以及相關api介紹。 該專欄主要為介紹camunda的學習和使用 &#x1f345;【2024】Camunda常用功能基本詳細介紹和使用-下&#xff08;1&…

Java進階學習之路

Java進階之路 提示&#xff1a;這里可以添加系列文章的所有文章的目錄&#xff0c;目錄需要自己手動添加 提示&#xff1a;寫完文章后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 目錄 Java進階之路前言一、Java入門 Java基礎 1、Java概述 1.1 什…

JAVA安全—反射機制攻擊鏈類對象成員變量方法構造方法

前言 還是JAVA安全&#xff0c;哎&#xff0c;真的講不完&#xff0c;太多啦。 今天主要是講一下JAVA中的反射機制&#xff0c;因為反序列化的利用基本都是要用到這個反射機制&#xff0c;還有一些攻擊鏈條的構造&#xff0c;也會用到&#xff0c;所以就講一下。 什么是反射…