很多人都在問 pinia是什么?其實(shí)它是一個(gè)類似的插件,是vuex的最新一代的輕量級狀態(tài)管理插件,建議安利在很多新項(xiàng)目中其中pinia。
Pinia 的優(yōu)點(diǎn)
簡便,存儲和組件變得很類似,你可以輕松寫出優(yōu)雅的存儲。
類型安全,通過類型推斷,可以提供自動完成的功能。
vue devtools 支持,可以方便進(jìn)行調(diào)試。
Pinia 支持?jǐn)U展,可以非常方便地通過本地存儲,事物等進(jìn)行擴(kuò)展。
模塊化設(shè)計(jì),通過構(gòu)建多個(gè)存儲模塊,可以讓程序自動拆分它們。
非常輕巧,只有大約 1kb 的大小。
服務(wù)器端渲染支持。
起步安裝
npm i pinia
核心語法
pinia的核心語法有State,Getters,Actions,Plugins以及Stores outside of components(在組件外進(jìn)行調(diào)用)。可以發(fā)現(xiàn)跟vuex4相比,pinia少了一個(gè)Mutation,在pinia中,是直接使用actions去做狀態(tài)的修改。在actions中以前我們是通過state.去獲得狀態(tài),而在這里可以直接通過this. 獲取狀態(tài)
可以在src下新建一個(gè)store文件夾 用來存放pinia相關(guān)的東西
index.ts import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => { return { count: 0 } }, // could also be defined as // state: () => ({ count: 0 }) actions: { increment() { this.count++ }, }, })
訪問state
我們可以直接通過state.訪問
const store = useStore() store.counter++
使用Getters
要注意,在pinia中,Getters和state里面不能使用相同的名字
export const useStore = defineStore('main', { state: () => ({ counter: 0, }), getters: { doubleCount: (state) => state.counter * 2, }, })
Actions
定義和處理業(yè)務(wù)邏輯
export const useStore = defineStore('main', { state: () => ({ counter: 0, }), actions: { increment() { this.counter++ }, randomizeCounter() { this.counter = Math.round(100 * Math.random()) }, }, })
Pinia實(shí)戰(zhàn)-登錄狀態(tài)的管理
1、新建store文件,在下面index.ts中編輯pinia的使用:
2、在state中定義了isAuthenticated表示登錄狀態(tài),對象user中存放登錄的用戶信息,初始狀態(tài)為空
在actions中進(jìn)行定義,setAuth方法判斷isAuth的值控制用戶的登錄狀態(tài),setUser方法將用戶的信息寫入user中
import { defineStore } from 'pinia' import {userType} from '../utils/types' export const useAuthStore = defineStore('auth', { state: () => { return { isAuthenticated:false,user: {} } }, getters: { getAuthenticated: (state) => state.isAuthenticated, getUser: (state) => state.user, }, actions: { setAuth(isAuth:boolean){ if(isAuth){ this.isAuthenticated = isAuth; }else { this.isAuthenticated = false; } }, setUser(user: userType | null){ if(user){ this.user = user; }else { this.user = {} } } }, })
定義好了pinia,然后去登錄界面使用
login.vue: 這里我就只展示使用pinia的部分了
首先要引入我們在pinia中定義的東西
import { useAuthStore } from "../store"; const store = useAuthStore();
解析token之后,信息保存在decode之中,然后直接通過store的setAuth和setUser方法傳入對應(yīng)的參數(shù)
// 解析token const decode: userType = jwt_decode(token); store.setAuth(!!decode); store.setUser(decode);
效果實(shí)現(xiàn)
在沒有登錄的時(shí)候,也就是還沒有token,我們查看控制臺vue:
可以看到下圖登錄狀態(tài)為false,用戶信息user中也為空
然后我們點(diǎn)擊登錄,此時(shí)token已經(jīng)保存,然后查看控制臺
可以看到,用戶的信息以及登錄狀態(tài)都獲取到了
同 vuex 的比較
Pinia 最初是為了探索 Vuex 下一次迭代可能會是什么樣子,結(jié)合了 Vuex 5 核心團(tuán)隊(duì)討論中的許多想法。最終,我們意識到 Pinia 已經(jīng)實(shí)現(xiàn)了我們在 Vuex 5 中想要的大部分內(nèi)容,并決定實(shí)現(xiàn)它取而代之的是新的建議。
與 Vuex 相比,Pinia 提供了一個(gè)更簡單的 API,具有更少的操作,提供了 Composition-API 風(fēng)格的 API,最重要的是,在與 TypeScript 一起使用時(shí)具有可靠的類型推斷支持。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/127605.html
摘要:基于等開發(fā)一款移動端音樂,界面參考了安卓版的網(wǎng)易云音樂布局適配常見移動端。圖標(biāo)使用阿里巴巴圖標(biāo)庫,中間的唱片旋轉(zhuǎn)動畫使用了實(shí)現(xiàn)。搜索功能實(shí)現(xiàn)功能搜索歌手歌單歌曲熱門搜索數(shù)據(jù)節(jié)流上拉刷新保存搜索記錄。 基于 Vue(2.5) + vuex + vue-router + vue-axios +better-scroll + Scss + ES6 等開發(fā)一款移動端音樂 WebApp,UI ...
可以用實(shí)現(xiàn)局部組件(dom)的重新渲染可以實(shí)現(xiàn)頁面的局部刷新。有一個(gè)最簡單辦法,我們可以用Vue中的v-if指令來實(shí)現(xiàn)。 我們的思路是:除了上述用Vue中的v-if指令來實(shí)現(xiàn),我們也可以用另一個(gè)方法就是新建一個(gè)空白組件,需要刷新局部頁面時(shí)跳轉(zhuǎn)至這個(gè)空白組件頁面,然后在空白組件內(nèi)的beforeRouteEnter守衛(wèi)中又跳轉(zhuǎn)回原來的頁面。 如下圖所示,在Vue3.X中不僅可以實(shí)現(xiàn)點(diǎn)擊刷新,按...
摘要:項(xiàng)目預(yù)覽線上訪問或者二維碼掃描項(xiàng)目描述全家桶模仿網(wǎng)易嚴(yán)選瀏覽,購物流程,好的生活,沒那么貴。對狀態(tài)管理有了進(jìn)一步的了解在項(xiàng)目過程中每一個(gè)組件都應(yīng)用了這個(gè)組件,切換的時(shí)候每次當(dāng)前選中的選項(xiàng)都是第一項(xiàng)成選中狀態(tài),究其原因的他們的狀態(tài)沒有共享。 項(xiàng)目預(yù)覽 showImg(https://segmentfault.com/img/remote/1460000009660678?w=1481&h...
摘要:狀態(tài)管理社區(qū)當(dāng)前最流行的狀態(tài)管理方案分別是單向數(shù)據(jù)流的和基于的。目前的現(xiàn)狀主要是由于并沒有將其底層的曝光出來。是一個(gè)開源項(xiàng)目,完全兼容的,擁簇面向未來編程,致力于加速未來生態(tài)圈的建設(shè)。 概要 Vue 的作者尤雨溪最近公布了 3.0 版本最重要的 RFC Vue Function-based API。在 React 推出 Hooks 后不久,Vue 社區(qū)也迎來了自己的組件邏輯復(fù)用機(jī)制。 ...
閱讀 547·2023-03-27 18:33
閱讀 732·2023-03-26 17:27
閱讀 630·2023-03-26 17:14
閱讀 591·2023-03-17 21:13
閱讀 520·2023-03-17 08:28
閱讀 1801·2023-02-27 22:32
閱讀 1292·2023-02-27 22:27
閱讀 2177·2023-01-20 08:28