【pinia】Pinia入門和基本使用:

文章目錄

    • 一、 什么是pinia
    • 二、 創建空Vue項目并安裝Pinia
      • 1. 創建空Vue項目
      • 2. 安裝Pinia并注冊
    • 三、 實現counter
    • 四、 實現getters
    • 五、 異步action
    • 六、 storeToRefs保持響應式解構
    • 七、基本使用:
            • 【1】main.js
            • 【2】store=》index.js
            • 【3】member.ts


一、 什么是pinia

Pinia 是 Vue 的專屬狀態管理庫,可以實現跨組件或頁面共享狀態,是 vuex 狀態管理工具的替代品,和 Vuex相比,具備以下優勢

  1. 提供更加簡單的API (去掉了 mutation )
  2. 提供符合組合式API風格的API (和 Vue3 新語法統一)
  3. 去掉了modules的概念,每一個store都是一個獨立的模塊
  4. 搭配 TypeScript 一起使用提供可靠的類型推斷

二、 創建空Vue項目并安裝Pinia

1. 創建空Vue項目

npm init vue@latest

2. 安裝Pinia并注冊

npm i pinia
import { createPinia } from 'pinia'const app = createApp(App)
// 以插件的形式注冊
app.use(createPinia())
app.use(router)
app.mount('#app')

三、 實現counter

核心步驟:

  1. 定義store
  2. 組件使用store

1- 定義store

import { defineStore } from 'pinia'
import { ref } from 'vue'export const useCounterStore = defineStore('counter', ()=>{// 數據 (state)const count = ref(0)// 修改數據的方法 (action)const increment = ()=>{count.value++}// 以對象形式返回return {count,increment}
})

2- 組件使用store

<script setup>// 1. 導入use方法import { useCounterStore } from '@/stores/counter'// 2. 執行方法得到store store里有數據和方法const counterStore = useCounterStore()
</script><template><button @click="counterStore.increment">{{ counterStore.count }}</button>
</template>

四、 實現getters

getters直接使用計算屬性即可實現

// 數據(state)
const count = ref(0)
// getter (computed)
const doubleCount = computed(() => count.value * 2)

五、 異步action

思想:action函數既支持同步也支持異步,和在組件中發送網絡請求寫法保持一致
步驟:

  1. store中定義action
  2. 組件中觸發action

1- store中定義action

const API_URL = 'http://geek.itheima.net/v1_0/channels'export const useCounterStore = defineStore('counter', ()=>{// 數據const list = ref([])// 異步actionconst loadList = async ()=>{const res = await axios.get(API_URL)list.value = res.data.data.channels}return {list,loadList}
})

2- 組件中調用action

<script setup>import { useCounterStore } from '@/stores/counter'const counterStore = useCounterStore()// 調用異步actioncounterStore.loadList()
</script><template><ul><li v-for="item in counterStore.list" :key="item.id">{{ item.name }}</li></ul>
</template>

六、 storeToRefs保持響應式解構

直接基于store進行解構賦值,響應式數據(state和getter)會丟失響應式特性,使用storeToRefs輔助保持響應式

<script setup>import { storeToRefs } from 'pinia'import { useCounterStore } from '@/stores/counter'const counterStore = useCounterStore()// 使用它storeToRefs包裹之后解構保持響應式const { count } = storeToRefs(counterStore)const { increment } = counterStore</script><template><button @click="increment">{{ count }}</button>
</template>

七、基本使用:

【1】main.js
import { createSSRApp } from 'vue'
import App from './App.vue'// 導入 pinia 實例
import pinia from './stores'
import persist from 'pinia-plugin-persistedstate'
// 使用持久化存儲插件
pinia.use(persist)export function createApp() {// 創建 vue 實例const app = createSSRApp(App)// 使用 piniaapp.use(pinia)return {app,}
}

在這里插入圖片描述

【2】store=》index.js
import { createPinia } from 'pinia'// 創建 pinia 實例
const pinia = createPinia()// 默認導出,給 main.ts 使用
export default pinia

在這里插入圖片描述

【3】member.ts
import type { LoginResult } from '@/types/member'
import { defineStore } from 'pinia'
import { ref } from 'vue'// 定義 Store
export const useMemberStore = defineStore('member',() => {// 會員信息const profile = ref<LoginResult>()// 保存會員信息,登錄時使用const setProfile = (val: LoginResult) => {profile.value = val}// 清理會員信息,退出時使用const clearProfile = () => {profile.value = undefined}// 記得 returnreturn {profile,setProfile,clearProfile,}},{// 網頁端配置// persist: true,// 小程序端配置persist: {storage: {getItem(key) {return uni.getStorageSync(key)},setItem(key, value) {uni.setStorageSync(key, value)},},},},
)

在這里插入圖片描述

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

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

相關文章

Python:列表、元組、集合、字典,數據類型之間的 5 個差異

Python&#xff1a;列表、元組、集合、字典&#xff0c;數據類型之間的 5 個差異 1. 相同點2. 不同點2.1 排序2.2 索引2.3 可變性2.5 允許的類型2.4 允許重復 源碼 這篇博客將介紹列表、元組、集合、字典&#xff08;lists, tuples, sets, and dictionaries&#xff09;數據類型…

6.0 Python 使用函數裝飾器

裝飾器可以使函數執行前和執行后分別執行其他的附加功能&#xff0c;這種在代碼運行期間動態增加功能的方式&#xff0c;稱之為"裝飾器"(Decorator)&#xff0c;裝飾器的功能非常強大&#xff0c;裝飾器一般接受一個函數對象作為參數&#xff0c;以對其進行增強&…

安達發APS|生產計劃排產軟件助力加工制造業智能化轉型

隨著全球經濟一體化的不斷深入&#xff0c;市場競爭日益激烈&#xff0c;加工制造企業面臨著巨大的生存壓力。在這種情況下&#xff0c;企業對于生產計劃的精細化管理需求日益迫切。為了適應這一市場需求&#xff0c;安達發推出了專門針對加工企業的APS生產計劃排產軟件&#x…

新一代構建工具 maven-mvnd

新一代構建工具 maven-mvnd mvnd的前世今生下載安裝 mvndIDEA集成 mvnd的前世今生 maven 作為一代經典的構建工具&#xff0c;流行了很多年&#xff0c;知道現在依然是大部分Java項目的構建工具的首選&#xff1b;但隨著項目復雜度提高&#xff0c;代碼量及依賴庫的增多使得ma…

簡單易懂的 Postman Runner 參數自增教程

目錄 什么是 Postman Runner&#xff1f; Postman Runner 如何實現參數自增&#xff1f; 步驟一&#xff1a;設置全局參數 步驟二&#xff1a;將全局參數帶入請求參數 步驟三&#xff1a;實現參數自增 資料獲取方法 什么是 Postman Runner&#xff1f; Postman Runner 是…

Python爬蟲(1)一次性搞定Selenium(新版)8種find_element元素定位方式

selenium中有8種不錯的元素定位方式&#xff0c;每個方式和應用場景都不一樣&#xff0c;需要根據自己的使用情況來進行修改 8種find_element元素定位方式 1.id定位2.CSS定位3.XPATH定位4.name定位5.class_name定位6.Link_Text定位7.PARTIAL_LINK_TEXT定位8.TAG_NAME定位總結 …

【第一階段】kotlin中反引號中的函數名特點

在kotlin中可以直接中文定義函數&#xff0c;使用反引號進行調用 eg: fun main() {2023年8月9日定義的函數(5) }private fun 2023年8月9日定義的函數(num:Int){println("反引號的用法$num") }執行結果 在Java中is,in可以定義方法&#xff0c;但是在kotlin中is,in是…

資料分析(三)—— 基期、現期、人口、增長量

基期 基期值 現期值 - 增長量 增長量/增長率 現期值/1&#xff08;間隔)增長率 化除為乘 &#xff1a;當增長率&#xff5c;r| < 5% 時&#xff0c;&#xff0c; 注&#xff1a;當選項首位相同&#xff0c;第二位也相同時&#xff0c;只能用直除 基期和差 (結合選…

SolidUI社區-根據Prompt打造人設

背景 隨著文本生成圖像的語言模型興起&#xff0c;SolidUI想幫人們快速構建可視化工具&#xff0c;可視化內容包括2D,3D,3D場景&#xff0c;從而快速構三維數據演示場景。SolidUI 是一個創新的項目&#xff0c;旨在將自然語言處理&#xff08;NLP&#xff09;與計算機圖形學相…

【openwrt學習筆記】dnsmasq源碼閱讀

目錄 一、DHCP(Dynamic Host Configuration Protocol)1.1 前置知識1.2 參考鏈接1.3 IP地址分配代碼分析rfc2131.cdhcp-common.cdhcp.c 1.4 幾個小問題1.4.1 連續IP模式&#xff08;sequential_ip&#xff09;1.4.2 重新連接使用IP地址1.4.3 續約租期1.4.4 不同的MAC地址分配到相…

VS+Qt+C++旅游景區地圖導航源碼實例

程序示例精選 VSQtC旅游景區地圖導航 如需安裝運行環境或遠程調試&#xff0c;見文章底部個人QQ名片&#xff0c;由專業技術人員遠程協助&#xff01; 前言 這篇博客針對<<VSQtC旅游景區地圖導航>>編寫代碼&#xff0c;代碼整潔&#xff0c;規則&#xff0c;易讀。…

【Vue框架】菜單欄權限的使用與顯示

前言 在 【Vue框架】Vue路由配置 中的getters.js里&#xff0c;可以看到有一個應用程序的狀態&#xff08;變量&#xff09;叫 permission_routes&#xff0c;這個就是管理前端菜單欄的狀態。具體代碼的介紹&#xff0c;都以注釋的形式來說明。 1、modules\permission.js 1…

SpringBoot 將項目打包成 jar 包

SpringBoot 將項目打包成 jar 包 一、項目打包成 jar 包 首先在 pom.xml 文件中導入 Springboot 的 maven 依賴 <!-- 將應用打包成一個可以執行的 jar 包 --> <build><plugins><plugin><groupId>org.springframework.boot</groupId><…

學習筆記整理-面向對象-02-認識函數的上下文

一、認識函數的上下文 什么是上下文 垃圾分類&#xff0c;這是非常好的習慣&#xff0c;值得表揚隨手關燈&#xff0c;這是非常好的習慣&#xff0c;值得表揚遛狗栓繩&#xff0c;這是非常好的習慣&#xff0c;值得表揚課后復習&#xff0c;這是非常好的習慣&#xff0c;值得…

【數據結構】單鏈表OJ題(二)

&#x1f525;博客主頁&#xff1a;小王又困了 &#x1f4da;系列專欄&#xff1a;數據結構 &#x1f31f;人之為學&#xff0c;不日近則日退 ??感謝大家點贊&#x1f44d;收藏?評論?? 目錄 一、鏈表分割 &#x1f4a1;方法一&#xff1a; 二、鏈表的回文 &#x…

hosts文件中被添加 windows10.microdone.cn

在網上搜了一圈逗說是之前下過征信中心的安全控件,是微通新成網絡科技有限公司這家公司提供的,也是http://microdone.cn的運營商。后邊只要使用代理,就會跳出來,所以常規處理操作就是去把瀏覽器上的安全控件卸載了。 參考 解決 windows10 的 代理頻繁被自動篡改為windows10.mi…

利用python實現激光雷達LAS數據濾波的7種方式,使用laspy讀寫

激光雷達&#xff08;LiDAR&#xff09;數據在實際應用中可能受到噪聲和不完美的測量影響&#xff0c;因此數據去噪和濾波方法變得至關重要&#xff0c;以提高數據質量和準確性。以下是一些常用的激光雷達數據去噪與濾波方法。 原始數據如下&#xff1a; 1. 移動平均濾波&…

kubernetes中PV和PVC

目錄 一、PV、PVC簡介 二、PV、PVC關系 三、創建靜態PV 1.配置nfs存儲 2.定義PV 3.定義PVC 4.測試訪問 四、 搭建 StorageClass nfs-client-provisioner &#xff0c;實現 NFS 的動態 PV 創建 1. 配置nfs服務 2.創建 Service Account 3.使用 Deployment 來創建 NFS P…

Figma中文社區來啦,云端協作設計你準備好了嗎?

Figma是改變產品設計協作方式的重要工具,但由于沒有中文社區,對國內設計師的約束較大。而擁有全中文UI 界面、功能齊全的即時設計資源廣場,恰好彌補了Figma的這一短板,它也將取代Figma成為設計師新寵。 1、UI組件集 Figma中文社區替代即時設計資源廣場,擁有海量豐富的UI設計組…

【BEV Review】論文 Delving into the Devils of Bird’s-eye-view 2022-9 筆記

背景 一般來說&#xff0c;自動駕駛車輛的視覺傳感器&#xff08;比如攝像頭&#xff09;安裝在車身上方或者車內后視鏡上。無論哪個位置&#xff0c;攝像頭所得到的都是真實世界在透視視圖&#xff08;Perspective View&#xff09;下的投影&#xff08;世界坐標系到圖像坐標系…