uni-app中使用pinia

目錄

Pinia 是什么?

uni-app 使用Pinia

main.js 中引用pinia

創建和注冊模塊

定義pinia方式

選項options方式?定義pinia

頁面中使用 pinia選項options方式

函數方式?定義pinia

頁面中使用?函數方式?定義的pinia


Pinia 是什么?

Pinia(發音為?/pi?nj?/,如英語中的?peenya) 是 Vue 的存儲庫,它允許您跨組件、頁面共享狀態。

在服務器端以及小型單頁應用程序中,您也可以從使用 Pinia 中獲得很多好處:

  • Devtools 支持

    • 追蹤 actions、mutations 的時間線

    • 在組件中展示它們所用到的 Store

    • 讓調試更容易的 Time travel

  • ?熱模塊更換

    • 不必重載頁面即可修改 Store

    • 開發時可保持當前的 State

  • 為 JS 開發者提供適當的 TypeScript 支持以及 自動補全 功能。

圖片

uni-app 使用Pinia

uni-app 內置了 Pinia 。Vue 2 項目暫不支持

使用 HBuilder X 不需要手動安裝,直接使用即可。使用 CLI 需要手動安裝,執行?yarn add pinia@2.0.33?或?npm install pinia@2.0.33

uni-app已經內置了vuex和pinia兩個狀態管理,不需要安裝即可使用。

建議項目結構

├──?pages
├──?static
└──?stores?//?注意此處└──?counter.js
├──?App.vue
├──?main.js
├──?manifest.json
├──?pages.json
└──?uni.scss

main.js 中引用pinia

mian.js?引用并使用pinia

//導入pinia
import?*?as?Pinia?from??'pinia'//?創建Pinia實例??//?將pinia實例掛載到vue實例上?
app.use(Pinia.createPinia());return?{app,Pinia,?//?此處必須將?Pinia?返回
}?

main.js完整代碼

//?#ifndef?VUE3
import?Vue?from?'vue'
import?App?from?'./App'?Vue.config.productionTip?=?falseApp.mpType?=?'app'const?app?=?new?Vue({...App
})
app.$mount()
//?#endif//?#ifdef?VUE3
import?{?createSSRApp?}?from?'vue'//導入pinia??
import?*?as?Pinia?from??'pinia'import?App?from?'./App.vue'
export?function?createApp()?{const?app?=?createSSRApp(App)//?創建Pinia實例??//?將pinia實例掛載到vue實例上?app.use(Pinia.createPinia());return?{app,Pinia,?//?此處必須將?Pinia?返回}
}
//?#endif

請特別注意pinia引用位置,否則會報錯

圖片

創建和注冊模塊

在需要使用全局狀態管理的地方,你可以創建一個或多個Pinia模塊。每個模塊代表一個具體的狀態管理單元。

項目中,新建stores文件夾,用于存儲?創建和注冊的模塊

圖片

stores文件夾,新建js文件(useCounterStore.js),用于存儲?創建和注冊的模塊

圖片

定義pinia方式

選項options方式?定義pinia

useCounterStore.js中寫入如下代碼

import?{?defineStore?}?from?'pinia'//?定義倉庫有兩種定義方式//?01?選項options方式
export?const?useCounterStore?=?defineStore('counter',?{//?定義狀態state:()=>({count:5}),//?計算數據getters:{doubleCount:(state)=>state.count*2},//?動作支持異步actions:{setCount(v){this.count?=?v;}}
})

頁面中使用 pinia選項options方式

<template><view>pinia?大菠蘿doubleCount:{{doubleCount}}<button>{{count}}</button></view>
</template><script>
import?{useCounterStore}?from?"@/stores/useCounterStore.js
//?map方泛
import?{mapState}?from?'pinia';export?default?{data(){},computed:?function(){//?把pinia?的state映射到頁面...mapState(useCounterStore,["count","doubleCount"]}?,methods:{//?把pinia的方法映射到頁面...mapActions(useCounterStore,["setCount"])}
</script>

這種寫法,和vuex很類似,但是少了mutation方法

函數方式?定義pinia

新建js文件(useColorStore.js),并且定義pinia

//?導入定義倉庫的方法
import?{defineStore}?from?'pinia';//?導入響應式和計算
import?{ref}?from?'vue'
const??useColorStore?=?defineStore("color",()=>{//?定義一個狀態顏色為?默認紅色const?color=ref('red');//?定義一個設置狀態的方法const?setColor?=?v=>{color.value?=?v;}//?導入return?{color,setColor}
})?export?default?useColorStore;??????????

頁面中使用?函數方式?定義的pinia

<template><view?class="container"><button?@click="setColor">更改顏色</button>?<view?:style="'background:'+colorStore.color">v-show="isShow"</view></view>
</template><script?setup>import?useColorStore?from?'@/stores/useColorStore.js'const?colorStore?=?useColorStore()?const?setColor?=?()?=>?{?colorStore.setColor('#333')}??
</script>?<style?lang="less"?scoped>?.container?{padding:?0?20px?20px;font-size:?14px;line-height:?24px;}
</style>

誤區

圖片

參考文檔

  • 狀態管理 Pinia | uni-app官網

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

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

相關文章

用戶新增預測——baseline學習筆記

一、賽題理解 1. 賽題名稱 用戶新增預測挑戰賽 2. 賽題數據集 賽題數據由約62萬條訓練集、20萬條測試集數據組成&#xff0c;共包含13個字段。其中uuid為樣本唯一標識&#xff0c;eid為訪問行為ID&#xff0c;udmap為行為屬性&#xff0c;其中的key1到key9表示不同的行為屬性…

S-Video端口接口芯片ESD保護方案圖

在音/視頻領域&#xff0c;除了常見的HDMI、DVI接口等&#xff0c;還有一些冷門的接口&#xff0c;比如S-Video端口&#xff0c;相信很多人可能都沒有聽說過。S-Video視頻端口同樣擁有較好的數據傳輸功能。S-Video二分量視頻端口&#xff0c;英文全稱Separate Video&#xff0c…

Macbook 終端 git 命令補全和提示

Mac OS自帶的終端&#xff0c;用起來雖然有些不太方便&#xff0c;界面也不夠友好&#xff0c;關鍵是在windows上用習慣了自動補全功能&#xff0c;在Mac上一個個的拼寫單詞是真的難受&#xff0c;逼著我記英文單詞。 經過一天的磨合&#xff0c;我實在忍不了&#xff0c;在網上…

復習vue3,簡簡單單記錄

這里的知識是結合視頻以及其他文章一起學習&#xff0c;僅用于個人復習記錄 ref 和reactive ref 用于基本類型 reactive 用于引用類型 如果使用ref 傳遞對象&#xff0c;修改值時候需要寫為obj.value.attr 方式修改屬性值 如果使用reactive 處理對象&#xff0c;直接obj.att…

Lua學習記錄

Lua基礎了解 Lua的注釋通過 (-- 單行注釋&#xff0c;--[[ ]] 多行注釋)可以不加&#xff1b; 多個變量賦值&#xff0c;按順序賦值&#xff0c;沒有則為nil&#xff1b; function的簡單用法&#xff0c;多個返回值配合多重賦值&#xff0c;以end為結束標志 Lua下標從1開始&…

JSP-學習筆記

文章目錄 1.JSP介紹2 JSP快速入門3 JSP 腳本3.1 JSP腳本案例3.2 JSP缺點 4 EL表達式4.1 快速入門案例 5. JSTL標簽6. MVC模式和三層架構6.1 MVC6.2 三層架構 7. 案例-基于MVC和三層架構實現商品表的增刪改查 1.JSP介紹 概念 JSP&#xff08;JavaServer Pages&#xff09;是一種…

Azure存儲賬戶

存儲賬戶的概念 Azure存儲賬戶是Azure提供的一種云存儲解決方案&#xff0c;用于存儲和訪問各種類型的數據&#xff0c;包括文件、磁盤、隊列、表格和Blob&#xff08;二進制大對象&#xff09;數據。存儲賬戶可以基于訪問模式和冗余需求來選擇不同的類型&#xff0c;以滿足應…

【MySQL--->表的操作】

文章目錄 [TOC](文章目錄) 一、創建表二、查看表三、修改表四、刪除表drop table 表名; ![在這里插入圖片描述](https://img-blog.csdnimg.cn/15227b8335364d41bd01b4b4dd83ee55.png) 一、創建表 語句格式:create table 表名(列名 類型,…)字符集 校驗規則 存儲引擎;字符集和校…

我還不知道?Android組件化插件化模塊化

Android組件化、插件化和模塊化是針對Android應用程序開發的一種架構設計思想和開發方式。 組件化&#xff08;Componentization&#xff09;&#xff1a; 組件化是將一個大型的Android應用程序拆分成多個獨立的組件&#xff08;Module&#xff09;&#xff0c;每個組件可以獨…

python使用裝飾器記錄方法耗時

思路 python使用修飾器記錄方法耗時&#xff0c;目的是每當方法執行完后&#xff0c;可以記錄該方法耗時&#xff0c;而不需要在每個方法的執行前后&#xff0c;去創建一個臨時變量&#xff0c;來記錄耗時。 方式一&#xff08;不推薦&#xff09;&#xff1a; 在每個方法的…

source insight 添加宏-文件頭加注釋

source insight 3.5 自帶的一些宏&#xff0c;在安裝目錄下的 utils.em 文件中&#xff0c;用戶也可以自己寫文件&#xff0c;命令為xxx.em &#xff0c;然后把這個文件添加到項目中即可&#xff0c;添加后在菜單欄 Options -> Key Assignments 里輸入macro 就能顯示新添加的…

第一個ArkTS項目實踐-鴻蒙ArkTS

第一個ArkTS項目實踐-ArkTS 第一個ArkTS項目實踐-ArkTS自定義組件的組成配置屬性與布局配置屬性布局 改變組件狀態循環渲染列表數據代碼ToDoItem組件ToDoList頁面 效果參考資料 第一個ArkTS項目實踐-ArkTS 本篇文章是官網上視頻對ArkTS開發實踐的第一個視頻&#xff0c;主要是引…

Matplotlib數據可視化(三)

目錄 1.繪圖的填充 1.1 曲線下方區域的填充 1.2 填充部分區域 1.3 兩條曲線之間的區域填充 1.4 直接使用fill進行填充 1.繪圖的填充 繪圖的填充可以調用fill_between()或fill()進行填充。 1.1 曲線下方區域的填充 x np.linspace(0,1,500) y np.sin(3*np.pi*x)*np.exp…

【C語言】每日一題(找到所有數組中消失的數字)

找到所有數組中消失的數字&#xff0c;鏈接奉上。 這里簡單說一下&#xff0c;因為還沒有接觸到動態內存&#xff0c;數據結構&#xff0c;所以知識有限&#xff0c;也是盡力而為&#xff0c;結合題庫的評論區找到了適合我的解法&#xff0c;以后有機會&#xff0c;會補上各種…

如何在HTML中使用React

突發奇想 查了查真的可以,官方文檔: 在網站中添加 React – React 開始 引入js <!-- 開發環境使用 --><script src"https://unpkg.com/react18/umd/react.development.js"></script><script src"https://unpkg.com/react-dom18/umd/reac…

穿越數字奇境:探尋元宇宙中的科技奇跡

隨著科技的迅速發展&#xff0c;元宇宙正逐漸成為一個備受關注的話題&#xff0c;它不僅是虛擬現實的延伸&#xff0c;更是將現實世界與數字世界融合的未來典范。在這個神秘而充滿活力的數字奇境中&#xff0c;涉及了眾多領域和技術&#xff0c;為我們呈現出了一個無限的創新和…

創建Azure資源鎖

鎖的介紹 在Azure中&#xff0c;資源鎖是一種用于保護訂閱、資源組或者單個資源的機制。它可以防止對受鎖定的資源進行刪除或修改操作&#xff0c;幫助確保資源的連續可用性和安全性。 Azure中的資源鎖可以分為兩種類型&#xff1a; 刪除鎖&#xff08;CanNotDelete&#xf…

elementUI遇到的問題記錄

一、 組件&#xff1a;el-table 問題&#xff1a;使用動態數據創建多級表頭后&#xff0c;刷新頁面時&#xff0c;table行會串行&#xff0c;某些列丟失&#xff0c;圖片列未顯示圖片 解決方案&#xff1a;給el-table增加key <el-table :key"${Matn.random()}${ite…

javaScript:模板字符串讓你忘記字符串拼接

目錄 一.前言 二.模板字符串的使用 1.介紹 2.模板字符串 支持換行 模板字符串更適合元素寫入 innerHTML模板字符串寫法 3.模板字符串中&#xff0c;可以運行表達式 4.模板字符串中可以運行函數 三.總結 語法&#xff1a; 多行字符串&#xff1a; 變量插值&#xff1a; …

μCOS-Ⅲ_簡介

μCOS-Ⅲ簡介 文章目錄 μCOS-Ⅲ簡介前言一、什么是 C/OS-III&#xff1f;二、C/OS-III的特點三、C/OS-III的版本和參考資料1、C/OS-III版本2、C/OS-III源碼獲取3、C/OS-III參考資料 四、C/OS-III源碼簡介總結 前言 μcos-III是一個可以基于ROM運行的、可裁剪的、搶占式、實時…