uni-app 使用Pinia進行全局狀態管理并持久化數據

1.引言

最近在學習移動端的開發,使用uni-app前端應用框架,通過學習B站的視頻以及找了一個開發模板,終于是有了一些心得體會。
B站視頻1:Day1-01-uni-app小兔鮮兒導學視頻_嗶哩嗶哩_bilibili

B站視頻2:01-課程和uni的基本介紹_嗶哩嗶哩_bilibili

開發模板:簡介 | unibest

2.代碼

代碼主要分為三個部分,第一是初始化Pinia,第二是在main.ts中引入,第三是定義全局狀態。

1.初始化Pinia

import { createPinia } from 'pinia'
import { createPersistedState } from 'pinia-plugin-persistedstate' // 數據持久化const store = createPinia()
store.use(createPersistedState({storage: {getItem: uni.getStorageSync,setItem: uni.setStorageSync,},}),
)export default store// 模塊統一導出 這個是定義的用戶信息持久化的文件路徑
export * from './modules/user'

2.main.ts引入

import { createSSRApp } from 'vue'
import App from './App.vue'
import store from './store'export function createApp() {const app = createSSRApp(App)app.use(store)return {app,}
}

3.定義用戶信息的持久化狀態

import { defineStore } from 'pinia'// 默認信息const initUserInfo: IUserInfo = {permissions: [],roles: [],isLogin: false,user: {id: 0,avatar: '',username: '',nickname: '',code: '',},dept: {id: 0,name: '',deptId: '',},
}export const useUserStore = defineStore('user',() => {// 默認的用戶信息const userInfo = ref<IUserInfo>(initUserInfo)// 存儲用戶信息const setUserInfo = (val: IUserInfo): void => {userInfo.value = valuserInfo.value.isLogin = true}// 清除用戶信息const clearUserInfo = (): void => {userInfo.value = initUserInfo}// 千萬不要忘記返回return {userInfo,setUserInfo,clearUserInfo,}},{// 網頁端配置// persist: true,// 小程序端配置persist: {storage: {getItem(key) {return uni.getStorageSync(key)},setItem(key, value) {uni.setStorageSync(key, value)},},},},
)

3.效果展示

在登錄界面,使用用戶名密碼登錄后,調用獲取用戶信息的接口進行存儲并持久化。

關鍵代碼

import { useUserStore } from '@/store'
// 人員信息
const userStore = useUserStore()// 登錄系統 一進系統就需要登錄
const handleLogin = async () => {const loginRes = await loginApi.login(loginForm)const userInfoRes = permissionApi.getUserPermissionInfo()userStore.setUserInfo((await userInfoRes).data)uni.switchTab({ url: '/pages/index/index' })
}

登錄之前

登錄后

4.寫在最后

本文內容不復雜,個人理解代碼也比較簡單,主要是把整體的框架搭起來后,添加對應的狀態管理,攔截器等就簡單很多。

感謝unibest模板,雖然模板需要自己改善的地方還有很多,但已經提供了足夠的便利了。
另外,自己也是剛學習移動端,有諸多需要加強的地方,如有遺漏,不吝賜教。

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

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

相關文章

JavaScript——for in類型

目錄 任務描述 相關知識 for in型 編程要求 任務描述 蘋果apple有多個屬性表示它的產地&#xff0c;比如locationProvince表示省份&#xff0c;這些屬性都以location開頭&#xff0c;和產地無關的屬性都不以location開頭。 本關任務&#xff1a;完成一個計算蘋果產地的函數…

[FFmpeg] windows下安裝帶gpu加速的ffmpeg

1.顯卡能力排查 目前只有 NIVIDIA 支持 ffmpeg 的 gpu加速(AMD貌似也陸續開始支持)。 在下述網站中查找自己的顯卡能夠支持的編解碼格式。https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-newhttps://developer.nvidia.com/video-encode-and-decod…

Vue88-Vuex中的mapActions、mapMutations

一、mapMutations的調用 此時結果不對&#xff0c;因為&#xff1a;若是點擊事件不傳值&#xff0c;默認傳的是event&#xff01;&#xff0c;所以&#xff0c;修改如下&#xff1a; 解決方式1&#xff1a; 解決方式2&#xff1a; 不推薦&#xff0c;寫法麻煩&#xff01; 1-…

【Unity數據交互】二進制私

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 專欄交流&#x1f9e7;&…

Bootstrap 5 小工具

Bootstrap 5 小工具 Bootstrap 5 是一個流行的前端框架,它提供了一系列的工具和組件,幫助開發者快速構建響應式和移動優先的網頁。在本文中,我們將探討 Bootstrap 5 中的一些實用小工具,這些工具可以極大地提高開發效率和用戶體驗。 1. 網格系統 Bootstrap 5 的網格系統…

Laravel 宏指令(Macro)動態添加自定義方法到Laravel的核心組件中

Laravel 宏指令&#xff08;Macro&#xff09; 在Laravel中&#xff0c;宏指令&#xff08;Macro&#xff09;是一種靈活的方式&#xff0c;允許您動態添加自定義方法到Laravel的核心組件中&#xff0c;如模型、查詢構建器、集合等&#xff0c;以便在不改變核心代碼的情況下擴展…

電腦硬盤分區的基本步驟(2個實用的硬盤分區方法)

在現代計算機中&#xff0c;硬盤分區是非常重要的一步。無論是新硬盤的初始化&#xff0c;還是重新組織現有硬盤&#xff0c;分區都是必不可少的操作。本文將詳細介紹電腦硬盤分區的基本步驟&#xff0c;幫助您更好地管理和利用硬盤空間。 文章開始&#xff0c;我們先簡單說一…

【C++】 解決 C++ 語言報錯:Invalid Conversion from ‘const char*’ to ‘char*’

文章目錄 引言 在 C 編程中&#xff0c;類型轉換錯誤&#xff08;Invalid Conversion&#xff09;是常見的編譯錯誤之一。特別是當程序試圖將一個常量字符指針&#xff08;const char*&#xff09;轉換為非常量字符指針&#xff08;char*&#xff09;時&#xff0c;會導致編譯…

Vmware環境下ESXi主機 配置上行鏈路、虛擬交換機、端口組、VMkernel網卡

一、適用場景 1、使用專業服務器跑多種不同的業務&#xff0c;每種業務可能所需運行的server環境不同&#xff0c;有的需要Linux server CentOS7/8、kali、unbuntu……有的需要windows server2008、2003、2016、2019、2022…… 2、本例采用的是VMware ESXi6.7 update 3版本&am…

力扣習題--找不同

目錄 前言 題目和解析 1、找不同 2、 思路和解析 總結 前言 本系列的所有習題均來自于力扣網站LeetBook - 力扣&#xff08;LeetCode&#xff09;全球極客摯愛的技術成長平臺 題目和解析 1、找不同 給定兩個字符串 s 和 t &#xff0c;它們只包含小寫字母。 字符串 t…

Java Maven中自動代碼檢查插件詳細介紹

文章目錄 Checkstyle主要特點使用場景配置與使用checkstyle.xmlsuppressions.xml 驗證打包時驗證執行命令驗證 Spotless配置文件內容Java配置部分POM 配置部分Markdown 配置部分Up to Date Checking執行部分 驗證打包時驗證在插件中執行命令驗證 Checkstyle Spotless 結合chec…

ABAP中BAPI_CURRENCY_CONV_TO_INTERNAL 函數的使用方法

在ABAP中&#xff0c;BAPI_CURRENCY_CONV_TO_INTERNAL 函數模塊主要用于將外部金額轉換為內部存儲格式。這對于確保金額數據在SAP系統中的一致性和準確性至關重要。以下是關于該函數模塊使用方法的詳細解釋&#xff1a; 函數模塊參數 調用 BAPI_CURRENCY_CONV_TO_INTERNAL 時…

redis學習(005 java客戶端 RedisTemplate學習)

黑馬程序員Redis入門到實戰教程&#xff0c;深度透析redis底層原理redis分布式鎖企業解決方案黑馬點評實戰項目 總時長 42:48:00 共175P 此文章包含第16p-第p23的內容 文章目錄 java客戶端jedisSpringDataRedis項目實現hash哈希操作 java客戶端 jedis 測試 ps:如果連接不上&…

vs2019 無法打開項目文件

vs2019 無法打開項目文件&#xff0c;無法找到 .NET SDK。請檢查確保已安裝此項且 global.json 中指定的版本(如有)與所安裝的版本相匹配 原因&#xff1a;缺少組件 解決方案&#xff1a;選擇需要的組件進行安裝完成

C#靜態類與非靜態類

1、靜態類 靜態類有幾個重要的特點&#xff1a; 1&#xff09;無法實例化&#xff1a;由于靜態類不能被實例化&#xff0c;因此它不會占用對象內存。 2&#xff09;靜態成員&#xff1a;靜態類只能包含靜態成員&#xff08;靜態方法、靜態屬性、靜態事件等&#xff09;。 3&am…

步進電機改伺服電機

步進電機&#xff1a; 42&#xff1a;軸徑5mm 57&#xff1a;軸徑8mm 86&#xff1a;軸徑14mm 【86CME120閉環】// 12牛米 伺服電機&#xff1a; 40&#xff1a; 60&#xff1a; 80&#xff1a; 86&#xff1a; ECMA——C 1 0910 R S 4.25A 軸徑…

評價ChatGPT與強人工智能的未來

在人工智能領域&#xff0c;ChatGPT的出現無疑是一個里程碑事件。它不僅展示了自然語言處理技術的巨大進步&#xff0c;也引發了人們對于強人工智能&#xff08;AGI&#xff09;的無限遐想。本文將從多個角度評價ChatGPT&#xff0c;并探討強人工智能距離我們還有多遠。 ChatGP…

虛擬地址和物理地址

到底什么是虛擬地址呢&#xff1f;它和物理地址的區別又在哪呢&#xff1f; 一. 虛擬地址的作用 1. 使代碼的移植性更好&#xff0c;在不同平臺進行編譯以后&#xff0c;就可以直接運行&#xff0c;因為到別的系統&#xff0c;會將你的虛擬地址轉換為物理地址&#xff0c;而使…

無人機運營合格證及無人機駕駛員合格證(AOPA)技術詳解

無人機運營合格證及無人機駕駛員合格證&#xff08;AOPA&#xff09;技術詳解如下&#xff1a; 一、無人機運營合格證 無人機運營合格證是無人機運營企業或個人必須獲得的證書&#xff0c;以確保無人機在運營過程中符合相關法規和標準。對于無人機運營合格證的具體要求和申請…

無人機人員搜救

人員搜救-水域救援 水域搜救&#xff1a;快速水面搜查 物資拋投&#xff1a;救生物資拋投 繩索牽引&#xff1a;牽引救援繩索 領航船艇&#xff1a;水面偵察領航 人員搜救 晝夜搜救&#xff0c;精準定位 水域搜救 經緯 M300 RTK 搭載禪思 H20T 能夠滿足全天候作業需求&a…