vue3中vuex與pinia的踩坑筆記記錄
介紹
Pinia 是 Vue.js 的輕量級狀態(tài)管理庫,最近很受歡迎。它使用 Vue 3 中的新反應(yīng)系統(tǒng)來構(gòu)建一個直觀且完全類型化的狀態(tài)管理庫。
Pinia的成功可以歸功于其管理存儲數(shù)據(jù)的獨(dú)特功能(可擴(kuò)展性、存儲模塊組織、狀態(tài)變化分組、多存儲創(chuàng)建等)。
另一方面,Vuex也是為Vue框架建立的一個流行的狀態(tài)管理庫,它也是Vue核心團(tuán)隊(duì)推薦的狀態(tài)管理庫。Vuex高度關(guān)注應(yīng)用程序的可擴(kuò)展性、開發(fā)人員的工效和信心。它基于與Redux相同的流量架構(gòu)。
安裝使用
安裝 vuex
npm install vuex@next --save
cnpm install vuex@next --save-
yarn add vuex@next --save
安裝 pinia
npm install pinia@next
cnpm install pinia@next
yarn add pinia@next
裝完直接根據(jù)下面的寫法來用就行了,只要你會用 vuex,你就等于你會用 pinia 的基本用法了,這邊不展示 pinia 的插件寫法
簡單對比寫法差異與共同點(diǎn)
vuex 和 pinia 是同團(tuán)隊(duì)成員編寫,但是 pinia 寫法上更加人性化,也更簡單
vuex在vue3中的寫法和用法
// store.js
import { createStore } from 'vuex'
export default createStore({
// 定義數(shù)據(jù)
state: { a:1 },
// 定義方法
mutations: {
xxx(state,number){
state.a = number
}
},
// 異步方法
actions: { },
// 獲取數(shù)據(jù)
getters: { getA:state=>return state.a }
})
// 在vue3中使用
<template>
<div>
{{number}}
<button @click="clickHandle">按鈕</button>
</div>
</template>
<script>
import {useStore} from "vuex"
export default {
setup(){
let store = useStore()
// ??? 如果直接取state的值必須使用computed才能實(shí)現(xiàn)數(shù)據(jù)的響應(yīng)式 如果直接取 store.state.a 則不會監(jiān)聽到數(shù)據(jù)的變化,或者使用getter,就可以不使用computed
let number = computed(()=>store.state.a)
const clickHandle = () => {
store.commit("xxx","100")
}
return{number,clickHandle}
}
}
<script>
pinia在vue3中的寫法和用法
// store.js
import { defineStore } from 'pinia'
// defineStore 調(diào)用后返回一個函數(shù),調(diào)用該函數(shù)獲得 Store 實(shí)體
export const GlobalStore = defineStore({
// id: 必須的,在所有 Store 中唯一
id: "myGlobalState",
// state: 返回對象的函數(shù)
state: () => ({
a: 1,
}),
getters: {},
actions: {
setXXX(number) {
this.a = number;
},
},
});
// 在vue3中使用
<template>
<div>
{{number}}
<button @click="clickHandle">按鈕</button>
</div>
</template>
<script>
import {GlobalStore} from "@/store/store.js"
export default {
setup(){
let store = GlobalStore();
// ??? 如果直接取state的值必須使用computed才能實(shí)現(xiàn)數(shù)據(jù)的響應(yīng)式 如果直接取 store.state.a 則不會監(jiān)聽到數(shù)據(jù)的變化,或者使用getter,就可以不使用computed (這邊和vuex是一樣的)
let number = computed(()=>store.a)
const clickHandle = () => {
store.setXXX("100")
}
return{number,clickHandle}
}
}
<script>
由此兩個代碼的對比我們可以看出使用 pinia 更加的簡潔,輕便。pinia 取消了原有的 mutations,合并成了 actions,且我們在取值的時候可以直接點(diǎn)到那個值,而不需要在.state,方法也是如此。
Vuex 和 Pinia 的優(yōu)缺點(diǎn)
Vuex的優(yōu)點(diǎn)
- 支持調(diào)試功能,如時間旅行和編輯
- 適用于大型、高復(fù)雜度的Vue.js項(xiàng)目
Vuex的缺點(diǎn)
- 從 Vue 3 開始,getter 的結(jié)果不會像計(jì)算屬性那樣緩存
- Vuex 4有一些與類型安全相關(guān)的問題
Pinia的優(yōu)點(diǎn)
- 完整的 TypeScript 支持:與在 Vuex 中添加 TypeScript 相比,添加 TypeScript 更容易
- 極其輕巧(體積約 1KB)
- store 的 action 被調(diào)度為常規(guī)的函數(shù)調(diào)用,而不是使用 dispatch 方法或 MapAction 輔助函數(shù),這在 Vuex 中很常見
- 支持多個Store
- 支持 Vue devtools、SSR 和 webpack 代碼拆分
Pinia的缺點(diǎn)
- 不支持時間旅行和編輯等調(diào)試功能
何時使用Pinia,何時使用Vuex
根據(jù)我的個人經(jīng)驗(yàn),由于Pinea是輕量級的,體積很小,它適合于中小型應(yīng)用。它也適用于低復(fù)雜度的Vue.js項(xiàng)目,因?yàn)橐恍┱{(diào)試功能,如時間旅行和編輯仍然不被支持。
將 Vuex 用于中小型 Vue.js 項(xiàng)目是過度的,因?yàn)樗亓考壍?,對性能降低有很大影響。因此,Vuex 適用于大規(guī)模、高復(fù)雜度的 Vue.js 項(xiàng)目。
總結(jié)
到此這篇關(guān)于vue3中vuex與pinia踩坑的文章就介紹到這了,更多相關(guān)vue3 vuex與pinia踩坑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue.js指令v-model實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了vue.js指令v-model實(shí)現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
vue3獲取元素并且修改元素樣式的實(shí)戰(zhàn)操作
ref作為在vue里面我們獲取元素最常用的一個api,在vue3迎來改造,下面這篇文章主要給大家介紹了關(guān)于vue3獲取元素并且修改元素樣式的相關(guān)資料,需要的朋友可以參考下2023-04-04
關(guān)于eslint和prettier格式化沖突問題
這篇文章主要介紹了eslint和prettier格式化沖突問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
el-upload前端實(shí)現(xiàn)多文件上傳功能示例
在Vue.js中可以使用Element UI庫中的<el-upload>組件來實(shí)現(xiàn)多文件上傳的功能,這篇文章主要給大家介紹了關(guān)于el-upload前端實(shí)現(xiàn)多文件上傳功能的相關(guān)資料,需要的朋友可以參考下2024-07-07
Vue 實(shí)現(xiàn)穿梭框功能的詳細(xì)代碼
本文給大家介紹Vue 實(shí)現(xiàn)穿梭框功能,代碼分為css,html和js代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-10-10
詳解vue如何使用rules對表單字段進(jìn)行校驗(yàn)
這篇文章主要介紹了詳解vue如何使用rules對表單字段進(jìn)行校驗(yàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
vue+webpack模擬后臺數(shù)據(jù)的示例代碼
這篇文章主要介紹了vue+webpack模擬后臺數(shù)據(jù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07

