Vue狀態管理庫-Pinia

一、Pinia是什么?

Pinia 是 Vue 的專屬狀態管理庫,它允許支持跨組件或頁面共享狀態,即共享數據,他的初始設計目的是設計一個支持組合式API的 Vue 狀態管理庫(因為vue3一個很大的改變就是組合式API),當然這并不是說Pinia只支持vue3,他是同時支持vue2和vue3的,本文傾向于擁抱Vue3,所以代碼語法都是傾向用組合式api的寫法

二、在vue3中使用Pinia

下面的流程和相關代碼均基于vue3項目

1、安裝pinia

npm install pinia

或用yarn安裝

yarn add pinia

package.json中看到pinia表示安裝成功?

2、創建pinia實例并將其傳遞給應用

//src/main.js//創建應用實例
import { createApp } from "vue";
import App from "./App.vue";
let app = createApp(App);//pinia實例
import { createPinia } from "pinia";
let pinia = createPinia();
app.use(pinia);app.mount("#app");

掛載完成后,我們就可以在Vue的devtools里看到Pinia了

3、定義Store

Store 是用?defineStore()?定義的,它的第一個參數要求是一個獨一無二的名字,在整個應用中保持唯一,?返回的函數命名為?use...?是一個符合組合式函數風格的約定

import { defineStore } from "pinia";//命名規則,建議以 `use` 開頭且以 `Store` 結尾,即 use~~~Store
export const useMapStore = () => {// 其他配置...
}

Setup store(Option Store可以查看官方,本文不列舉)

import { defineStore } from "pinia";
import { reactive, computed } from "vue";
import type { City, Province } from "@/interface/common";export const useMapStore = defineStore("mapStore", () => {//statelet cityList = reactive<Array<City>>([]);let provinceList = reactive([]);//getterconst simpleCityList = computed(() => {return cityList.filter((item) => item.code != "110000");});//actionsfunction changeCityList(list: City[]) {console.log("修改城市列表數據的事件被觸發");cityList = Object.assign(cityList, list);}function changeProviceList(list: Province[]) {console.log("修改省份列表數據的事件被觸發");provinceList = Object.assign(provinceList, list);}return {cityList,provinceList,simpleCityList,changeCityList,changeProviceList,};
});

?

4、使用store

<template><div>您好!歡迎來到星野的小世界</div><div>星野的目標是走遍中國的每一個省,中國的省如下:</div><div><ul><li v-for="city in cityList" :key="city.code">{{ city.name }}</li></ul></div>
</template><script setup lang='ts' name='Login'>
import { onMounted} from 'vue';
import { storeToRefs } from 'pinia';
import { getCityList } from "@/utils/common";
import { useMapStore } from '@/stores/map'let mapStore = useMapStore()
let { cityList } = storeToRefs(mapStore) //為了從 store 中提取屬性時保持其響應性,需要使用 storeToRefs()。它將為每一個響應式屬性創建引用onMounted(async () => {let list = await getCityList()mapStore.changeCityList(list) //修改store里的屬性數據
})
</script>
<style lang='scss' scoped></style>

getCityList是一個工具函數,調用一個免費api獲取中國的城市數據?

在?Setup Store?中:

  • ref()?/reactive ( ) 就是?state?屬性
  • computed()?就是?getters
  • function()?就是?actions

頁面效果

5、修改store中的state

例如store中的state有一個城市統計屬性: cityCount

在業務組件里,就可以通過mapStore.cityCount 直接修改數量

?

如果state有很多屬性,還可以調用?$patch?方法。它允許你用一個?state?的補丁對象在同一時間更改多個屬性

 mapStore.$patch({cityCount: mapStore.cityCount + 1,provinceCount: mapStore.provinceCount + 1})

好啦,Pinia 滿足基礎使用的讀寫改操作已經描述完畢,關于搭配?Nuxt?的 Pinia 完成SSR,后續會單獨出文,敬請期待!😁

ps: 學習成長過程的簡單記錄,如有不恰當之處,歡迎交流

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696772.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696772.shtml

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

相關文章

PFA三角燒瓶實驗室PFA錐形瓶本底純凈耐腐蝕性強

PFA三角燒瓶外觀呈平底圓錐狀&#xff0c;下闊上狹&#xff0c;有一圓柱形頸部&#xff0c;上方有一較頸部闊的開口&#xff0c;可用塞子封閉。PFA三角燒瓶也稱PFA錐形瓶&#xff0c;PFA反應瓶&#xff0c;PFA三角燒瓶、PFA依氏燒瓶、PFA錐形燒瓶&#xff0c;PFA鄂倫麥爾瓶等。…

普中51單片機學習(串口通信)

串口通信 原理 計算機通信是將計算機技術和通信技術的相結合&#xff0c;完成計算機與外部設備或計算機與計算機之間的信息交換 。可以分為兩大類&#xff1a;并行通信與串行通信。并行通信通常是將數據字節的各位用多條數據線同時進行傳送 。控制簡單、傳輸速度快&#xff1…

【大模型】finetune 百川2

使用官網例子finetune百川2&#xff0c;微調腳本如下 模型為baichuan_chat_13B_v1 export CUDA_VISIBLE_DEVICES1 hostfile"" deepspeed --hostfile$hostfile baichuan_fineturn/fine-tune/fine-tune.py \--report_to "none" \--data_path "baichu…

2.22號qt

1.使用信號和槽實現多個界面跳轉 1.1準備兩個界面 1.2第一個界面準備signal 1.3第二個界面準備slot 1.4將第一個界面的信號和槽進行連接 2.qss登錄界面升級優化 2.1概念 Qss是Qt程序界面中用來設置控件的背景圖片、大小、字體顏色、字體類型、按鈕狀態變化等屬性&#xff…

【Python】Python實現串口通信(Python+Stm32)

&#x1f389;歡迎來到Python專欄~Python實現串口通信 ☆* o(≧▽≦)o *☆嗨~我是小夏與酒&#x1f379; ?博客主頁&#xff1a;小夏與酒的博客 &#x1f388;該系列文章專欄&#xff1a;Python學習專欄 文章作者技術和水平有限&#xff0c;如果文中出現錯誤&#xff0c;希望…

springboot208基于springboot物流管理系統

基于spring boot物流管理系統設計與實現 摘 要 社會發展日新月異&#xff0c;用計算機應用實現數據管理功能已經算是很完善的了&#xff0c;但是隨著移動互聯網的到來&#xff0c;處理信息不再受制于地理位置的限制&#xff0c;處理信息及時高效&#xff0c;備受人們的喜愛。…

jax可微分編程的筆記

jax可微分編程的筆記 1.1.1 求導的基本概念 所謂的導數是一個從集合F到自身的映射. 有時,我們也將一個從函數到函數的映射稱為一個操作, 這里的操作在物理學中也被稱作一個算符. 但在計算機中的操作符相當于數學中的一個函數,而非從 函數到函數的映射. 應該指出的是,如果我們…

vue小記——this(2)

在Vue的方法中使用普通函數作為回調函數&#xff0c;那么在該回調函數中&#xff0c;this將不會指向Vue實例&#xff0c;而是指向全局對象&#xff08;在瀏覽器中是window&#xff09;。 錯誤 &#xff1a; export default { data() { return { message: Hello Vue! }; …

npm 包發布

name publish必填項&#xff08;version,nameverson構成唯一標識&#xff09;&#xff0c;唯一&#xff0c;所以publish前驗證庫里是否存在該名稱&#xff0c;方式npm info xxx npm ERR! 404 cy_test is not in the npm registry.可以使用。規則&#xff1a;不能以.或者_開頭…

maven工程打包引入本地jar包

1、通過maven生成本地區倉庫包 mvn install:install-file --settings D:\lkx\download\apache-maven-3.6.3\conf\settings.xml -Dfileaspose-cad-21.8.jar -DartifactIdaspose-cad -DgroupIdsystem.core -Dversion21.8 -Dpackagingjar -DgeneratePomtrue # --settings&#xf…

進程線程間的通信:2024/2/22

作業1&#xff1a;代碼實現線程互斥機制 代碼&#xff1a; #include <myhead.h>//臨界資源 int num10;//創建一個互斥鎖 pthread_mutex_t mutex;//任務一 void *task1(void *arg) {//獲取鎖資源pthread_mutex_lock(&mutex);num123;sleep(3);printf("task1:num…

PacketSender-用于發送/接收 TCP、UDP、SSL、HTTP 的網絡實用程序

PacketSender-用于發送/接收 TCP、UDP、SSL、HTTP 的網絡實用程序 PacketSender是一款開源的用于發送/接收 TCP、UDP、SSL、HTTP 的網絡實用程序&#xff0c;作者為dannagle。 其官網地址為&#xff1a;https://packetsender.com/&#xff0c;Github源代碼地址&#xff1a;htt…

【AI繪畫工具分別有哪些?】

目前有許多AI繪畫工具可供選擇&#xff0c;以下列舉了一些常見的AI繪畫工具&#xff1a; 1. DeepArt.io&#xff1a;該工具使用深度學習算法生成藝術風格的圖像&#xff0c;并可以將輸入圖像與指定的藝術風格進行合并。 2. Prisma&#xff1a;這是一款非常流行的AI繪畫應用&a…

SQL Server —— While語句循環

一&#xff1a;簡介 while 循環是有條件的循環控制語句。滿足條件后&#xff0c;再執行循環體中的SQL語句。 while: break, 如果有多條語句可以在while后面添加begin-end。關于while的語法 while(條件) -- begin -- 語句1 -- 語句2 -- break 根據情況是否添加break -- end 二…

leetcode日記(32)字符串相乘

做了很久很久……真的太繁瑣了&#xff01;&#xff01; class Solution { public:string multiply(string num1, string num2) {string s;string str;if (num1 "0" || num2 "0") return "0";for(int inum2.size()-1;i>0;i--){int c2num2[…

Open CASCADE學習|全局屬性

目錄 1、概念解釋 質心&#xff1a; 重心&#xff1a; 慣性矩&#xff1a; 慣性矩陣&#xff1a; 主慣性矩&#xff1a; 靜態慣性矩&#xff1a; 2、API 1、概念解釋 質心&#xff1a; 質心是質量中心的簡稱&#xff0c;指物質系統上被認為質量集中于此的一個假想點。…

Qt:tabWidget控件

一、tabWidget用來做什么 tabWidget控件用來進行不同控件頁面的跳轉&#xff0c; 二、控件的一些函數功能 添加一個頁面&#xff0c;返回index int addTab(QWidget *widget, const QString &); int addTab(QWidget *widget, const QIcon& icon, const QString &…

pytest教程-11-初識fixture

領取資料&#xff0c;咨詢答疑&#xff0c;請?wei: June__Go 上一小節我們學習了使用allure生成html測試報告的方法&#xff0c;本小節我們講解一下pytest fixture測試夾具的使用方法。 前言 在做自動化的過程中&#xff0c;編寫用例時候需要用到用例的前置和用例的后置&a…

2024年了,抖店還能做嗎?適合新手嗎?

我是電商珠珠 現在已經24年了&#xff0c;抖店也已經發展了四年了。其中有很多在門外觀望的人&#xff0c;還在猶豫不決。認為抖店發展到今天&#xff0c;所有的紅利早已在20年的時候就消失殆盡了&#xff0c;特別是沒有經驗的如果入駐了&#xff0c;既不能享受平臺紅利&#…

后端程序員入門react筆記(四)-綜合運用,寫一個小demo

樣式模塊化 有時候我們會遇到這樣的問題&#xff0c;有兩個css對一個class聲明了樣式&#xff0c;這樣的話后引入的css會覆蓋前面的css樣式&#xff0c;導致樣式沖突&#xff0c;那么我們怎么解決這種問題呢&#xff0c;我們可以使用樣式的模塊化&#xff0c;我們起名一個inde…