【Pinia】Pinia和Vuex對比

????????Pinia 是 Vue 官方團隊成員專門開發的一個全新狀態管理庫,并且 Vue 的官方狀態管理庫已經更改為了 Pinia。 在 Vuex 官方倉庫中也介紹說可以把 Pinia 當成是不同名稱的 Vuex 5,這也意味不會再出 5 版本了。

優點

1. 更加輕量級,壓縮后提交只有1.6kb。

2. 完整的 TS 的支持,Pinia 源碼完全由 TS 編碼完成。

????????Pinia 在與 TS 一起使用時,具有可靠的類型判斷支持;Vuex 之前對 TS 的支持很不友好。

3. 移除 mutations,只剩下 state 、 actions 、 getters,在store內部直接使用this使用state里的數據。

????????一旦 store 被實例化,就可以直接在 store 上訪問 state、getters 和 actions 中定義的任何屬性;而在使用 Vuex 的時候,更改狀態需要糾結選取 mutation 還是 action。

4. 不再有 Vuex 里多個 modules 的嵌套結構,可以定義多個 store 并靈活使用

5. 不會再有module的命名空間的概念,不需要記住他們的復雜關系。

6. 支持服務端渲染(SSR)。

7. 更友好的代碼分割機制。

8. 提供了 Pinia 狀態持久化。配置 | Pinia Plugin Persistedstate

舉例說明

針對第4點

????????Pinia版本:假設我們有一個購物車應用,需要管理用戶信息和購物車商品信息,可以用兩個 Store 來實現。

// userStore.js
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {state: () => ({name: '',age: 0,}),actions: {updateName(newName) {this.name = newName;},},
});// cartStore.js
import { defineStore } from 'pinia';
export const useCartStore = defineStore('cart', {state: () => ({items: [],}),actions: {addItem(item) {this.items.push(item);},},
});

? ? ? ? Vuex版本:在組件中,通過 this.$store 來訪問狀態,需要通過命名空間來區分模塊,例如 this.$store.state.user.namethis.$store.commit('cart/addItem', item)

// store.js
import { createStore } from 'vuex';
export default createStore({modules: {// 用戶user: {state: {name: '',age: 0,},mutations: {updateName(state, newName) {state.name = newName;},},},// 購物車cart: {state: {items: [],},mutations: {addItem(state, item) {state.items.push(item);},},},},
});

針對第5點

????????Vuex 中,如果沒有命名空間,多個模塊有相同名稱的方法,如模塊A和模塊B都有updateName,使用起來會沖突,因為 Vuex 不知道要調用哪個模塊的 updateName

// 模塊 A
mutations: {updateName(state, newName) {state.name = newName;},
}// 模塊 B
mutations: {updateName(state, newName) {state.name = newName;},
}

????????通過命名空間namespaced: true,可以將每個模塊的作用域限制在模塊內部,避免沖突。

// 模塊 A
namespaced: true, 
mutations: {updateName(state, newName) {state.name = newName;},
}// 模塊 B
namespaced: true, 
mutations: {updateName(state, newName) {state.name = newName;},
}// 組件中使用
this.$store.commit('moduleA/updateName', 'John');
this.$store.commit('moduleB/updateName', 'Jane');

????????當然,在 pinia 中沒有模塊化的概念了,就更不存在需要使用命名空間了。

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

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

相關文章

通過 Ansible 在 Windows 2022 上安裝 IIS Web 服務器

拓撲結構 這是一個用于通過 Ansible 部署 IIS Web 服務器的實驗室拓撲。 前提條件: 在被管理的節點上安裝WinRm 準備一張自簽名的證書 開放防火墻入站tcp 5985 5986端口 準備自簽名證書 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…

Oracle雙平面適用場景討論會議

4月28日,我在杭州組織召開了Oracle雙平面會議討論沙龍。在國產化數據庫浪潮的今天,Oracle數據庫作為國產數據庫的應急庫,在國產數據庫發生故障或者性能下降時,如何更好的使用Oracle。會議主題如下: 1、背景與痛點速覽&…

10.Linux進程信號

1. 理解信號 信號VS信號量 老婆:老婆餅-》沒有任何關系!信號:鬧鐘,上課鈴聲,臉色...人-》進程;信號中斷人正在做的事,是一種事件的異步通知機制; 我們自習一會,等張三回…

求解插值多項式及其余項表達式

例 求滿足 P ( x j ) f ( x j ) P(x_j) f(x_j) P(xj?)f(xj?) ( j 0 , 1 , 2 j0,1,2 j0,1,2) 及 P ′ ( x 1 ) f ′ ( x 1 ) P(x_1) f(x_1) P′(x1?)f′(x1?) 的插值多項式及其余項表達式。 解: 由給定條件,可確定次數不超過3的插值多項式。…

C++刷題:日期模擬(1)

(注:本文所展示代碼均為本人所寫,不一定為最優) 我們首先用純邏輯和手動計算來拆解日期模擬題,再來代碼實現,看看這些問題的底層思路怎么玩明白~ 一、基礎日期計算:直接算“過幾天是…

深入剖析Nginx:從入門到高并發架構實戰

深入剖析Nginx:從入門到高并發架構實戰 摘要:本文全面解析Nginx的核心功能、架構原理及實戰配置,涵蓋負載均衡、反向代理、動靜分離等高級應用場景,助你構建高性能Web服務架構。 一、Nginx是什么?為什么它如此重要&…

Qt客戶端技巧 -- 窗口美化 -- 圓角窗口

不解析&#xff0c;直接給代碼例子 利用窗口重繪事件處理函數paintEvent main.cpp #include <QtCore/qglobal.h> #if QT_VERSION > 0x050000 #include <QtWidgets/QApplication> #else #include <QtGui/QApplication> #endif#include "roundedwin…

Three.js學習筆記-三要素

Three.js 學習筆記-三要素 一、Three.js 簡介 (一)前世今生 Three.js 是一款運行在瀏覽器中的 3D 引擎,由 Ricardo Cabello(Mr.doob)在 2010 年 4 月于 GitHub 首次發布 。其起源可追溯到本世紀初,代碼最初用 ActionScript 編寫,2009 年移植到 JavaScript。隨著 Web…

動力電池點焊機:驅動電池焊接高效與可靠的核心力量|比斯特自動化

在新能源汽車與儲能設備需求激增的背景下&#xff0c;動力電池的制造工藝直接影響產品性能與安全性。作為電芯與極耳連接的核心設備&#xff0c;點焊機如何平衡效率、精度與可靠性&#xff0c;成為電池企業關注的重點。 動力電池點焊機的核心功能是確保電芯與極耳的穩固連接。…

OpenCV CUDA模塊圖像處理------創建一個模板匹配(Template Matching)對象函數createTemplateMatching()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 創建一個用于在 GPU 上執行模板匹配的 TemplateMatching 對象。 該函數返回一個指向 TemplateMatching 的智能指針&#xff08;Ptr&#xff09;…

natapp 內網穿透失敗

連不上網絡錯誤調試排查詳解 - NATAPP-內網穿透 基于ngrok的國內高速內網映射工具 如何將DNS服務器修改為114.114.114.114_百度知道 連不上/錯誤信息等問題解決匯總 - NATAPP-內網穿透 基于ngrok的國內高速內網映射工具 nslookup auth.natapp.cnping auth.natapp.cn

游戲(game)

題目描述 小明最近迷上了一款游戲&#xff0c;并且很想成為這款游戲的高手&#xff0c;這款游戲需要用 資源來買裝備。他剛開始的資源價值為0,于是他每天都會做日常任務來獲得價值為1的資源。 這款游戲中有每日商店&#xff0c;小明已經提前知道了接下來n天會出現的裝備&#x…

C# 類和繼承(抽象類)

抽象類 抽象類是指設計為被繼承的類。抽象類只能被用作其他類的基類。 不能創建抽象類的實例。抽象類使用abstract修飾符聲明。 抽象類可以包含抽象成員或普通的非抽象成員。抽象類的成員可以是抽象成員和普通帶 實現的成員的任意組合。抽象類自己可以派生自另一個抽象類。例…

關于臟讀,幻讀,可重復讀的學習

mysql 可以查詢當前事務隔離級別 默認是RR repeatable-read 如果要測臟讀 要配成未提交讀 RU 讀到了未提交的數據。 3.演示不可重復讀 要改成提交讀 RC 這個是指事務還未結束&#xff0c;其他事務修改了值。導致我兩次讀的不一樣。 4.RR–可以解決不可重復讀 小總結&…

華為云Astro中服務編排、自定義模型,頁面表格之間有什么關系?如何連接起來?如何操作?

目錄 一、核心關系解析 二、連接方式與操作步驟 (一)服務編排與自定義模型的連接 (二)自定義模型與頁面表格的連接 (三)服務編排與頁面表格的連接 三、操作示例:構建數據處理閉環 場景:用戶在頁面表格中修改設備信息,觸發服務編排校驗數據并更新數據庫。 四、…

Docker鏡像無法拉取問題解決辦法

最近再學習RabbitMQ&#xff0c;需要從Docker鏡像中拉取rabbitMQ&#xff0c;但是下拉失敗 總的來說就是無法和docker鏡像遠程倉庫建立連接 我又去嘗試ping docker.io發現根本沒有反應&#xff0c;還是無法連接找了許多辦法還是沒有辦法解決&#xff0c;最后才發現是鏡像問題&a…

向 AI Search 邁進,騰訊云 ES 自研 v-pack 向量增強插件揭秘

作者&#xff1a;來自騰訊云劉忠奇 2025 年 1 月&#xff0c;騰訊云 ES 團隊上線了 Elasticsearch 8.16.1 AI 搜索增強版&#xff0c;此發布版本重點提升了向量搜索、混合搜索的能力&#xff0c;為 RAG 類的 AI Search 場景保駕護航。除了緊跟 ES 官方在向量搜索上的大幅優化動…

electron-vite串口通信

一、構建項目后&#xff0c;安裝“串口通信庫” npm install serialport二、設置 npm install --save-dev electron-rebuild ./node_modules/.bin/electron-rebuild 注意&#xff1a;如果執行報錯以下問題 1、未配置python變量 2、沒有Microsoft Visual Studio BuildTools 3…

Cisco IOS XE WLC 任意文件上傳漏洞復現(CVE-2025-20188)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 前…

從 iPhone 備份照片: 保存iPhone圖片的5種方法

隨著智能手機越來越融入我們的生活&#xff0c;我們的照片已成為我們設備上最有價值的數據形式之一。然而&#xff0c;iPhone內部存儲空間仍然有限&#xff0c;因此我們需要將iPhone中的照片備份到另一個地方&#xff0c;以釋放空間并確保珍貴的圖像記憶的安全。閱讀本指南&…