国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue 3 第三十一章:狀態(tài)管理(Pinia基礎(chǔ)知識(shí))

這篇具有很好參考價(jià)值的文章主要介紹了vue 3 第三十一章:狀態(tài)管理(Pinia基礎(chǔ)知識(shí))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. Pinia 的介紹

狀態(tài)管理是現(xiàn)代 Web 應(yīng)用開發(fā)中的一個(gè)重要概念。Vue 3 中的狀態(tài)管理庫 Pinia,是一個(gè)基于Vue 3 Composition API的狀態(tài)管理庫,它提供了一種簡(jiǎn)單、靈活的方式來管理應(yīng)用程序的狀態(tài),同時(shí)還具有高性能可擴(kuò)展性。Pinia在某種程度上來說,也可以被叫做Vuex5,因?yàn)樗Y(jié)合了Vuex 5核心團(tuán)隊(duì)討論中的許多想法,所以 Pinia被作為新的推薦方案來代替Vuex。

2. Pinia 的優(yōu)點(diǎn)

  • Devtools 支持
    • 追蹤actionsmutations的時(shí)間線
    • 在組件中展示它們所用到的Store
    • 讓調(diào)試更容易的Time travel
  • 熱更新
    • 不必重載頁面即可修改Store
    • 開發(fā)時(shí)可保持當(dāng)前的State
  • 直接通過actions修改state中的數(shù)據(jù)。廢棄了mutation
  • 不再有可命名的模塊。取消了vuex中的module,每個(gè)Pinia模塊都是獨(dú)立的
  • 插件。可通過插件擴(kuò)展Pinia功能
  • 更好的TypeScript支持。提供了代碼補(bǔ)全功能,避免了過多魔法字符串的注入。
  • 支持服務(wù)端渲染。
  • 體積更小。壓縮后只有2.1KB

3. Pinia 的安裝和使用

3.1. 安裝

安裝 Pinia 很簡(jiǎn)單,只需要使用 npm 或者 yarn 安裝即可:

npm install pinia

# 或

yarn add pinia

3.2. 使用

3.1.1. 創(chuàng)建一個(gè) Pinia Store

創(chuàng)建一個(gè) Pinia Store 非常簡(jiǎn)單,下面是一個(gè)簡(jiǎn)單的示例:
Tips: 關(guān)于 Pinia Store 的命名,官方推薦的做法是 use+名稱+Store。

import { defineStore } from 'pinia'
// 你可以對(duì) `defineStore()` 的返回值進(jìn)行任意命名,但最好使用 store 的名字,同時(shí)以 `use` 開頭且以 `Store` 結(jié)尾。(比如 `useUserStore`,`useCartStore`,`useProductStore`)
// 第一個(gè)參數(shù)是你的應(yīng)用中 Store 的唯一 ID。
export const useCounterStore = defineStore({
  id: "counter",
  state: () => ({
    count: 0,
  }),
  actions: {
    increment() {
      this.count++;
    },
    decrement() {
      this.count--;
    },
  },
  getters: {
    doubleCount: ({ count }) => count * 2,
  },
});

在上面的代碼中,我們首先使用 defineStore 函數(shù)創(chuàng)建了一個(gè)名為 useCounterStore 的 Pinia Store,然后在 state 函數(shù)中定義了一個(gè) count 屬性,最后在 actions 對(duì)象中定義了 incrementdecrement 兩個(gè)方法來修改 count 屬性。

當(dāng)然了,我們用一個(gè)函數(shù)來定義 Store 也是同樣可行的:

import { ref, computed } from "vue";
// 你可以對(duì) `defineStore()` 的返回值進(jìn)行任意命名,但最好使用 store 的名字,同時(shí)以 `use` 開頭且以 `Store` 結(jié)尾。(比如 `useUserStore`,`useCartStore`,`useProductStore`)
// 第一個(gè)參數(shù)是你的應(yīng)用中 Store 的唯一 ID。
export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  const doubleCount = computed(() => count.value * 2);
  function increment() {
    count.value++
  }
  function decrement() {
    count.value--
  }

  return { count, doubleCount, increment, decrement }
})

3.2.2. 在組件中使用 Pinia Store

要在組件中使用 Pinia Store,我們需要將 Store 導(dǎo)入進(jìn)來。

<script setup lang="ts">
import { useCounterStore } from "@/stores/counter";

const counterStore = useCounterStore()
// 注意此處不能直接采用結(jié)構(gòu)賦值的方法:如 const { count, doubleCount } = useCounterStore()
// 這樣會(huì)讓數(shù)據(jù)失去響應(yīng)性
</script>

想結(jié)構(gòu)賦值的話,需要導(dǎo)入 storeToRefs 函數(shù),將解構(gòu)出來的參數(shù)變成響應(yīng)式:

<script setup lang="ts">
import { storeToRefs } from 'pinia'
import { useCounterStore } from "@/stores/counter";

const counterStore = useCounterStore()
// 將解構(gòu)出來的參數(shù)變成響應(yīng)式
const { count, doubleCount } = storeToRefs(counterStore)
// 作為 action 的 increment 和 decrement 可以直接解構(gòu)
const { increment, decrement } = counterStore 
</script>

3.2.3. 在模板中使用 Pinia Store

要在模板中使用 Pinia Store,我們?cè)谀0逯兄苯邮褂镁托辛恕?/p>

<template>
  <div>
    <p>Count: {{ counterStore.count }}</p>
    <p>doubleCount: {{ counterStore.doubleCount }}</p>
    <button @click="counterStore.increment()">Increment</button>
    <button @click="counterStore.decrement()">Decrement</button>
  </div>
</template>

4. Pinia 的狀態(tài)管理和數(shù)據(jù)流

  • Pinia中,狀態(tài)管理和數(shù)據(jù)流的概念非常重要。狀態(tài)管理是指將應(yīng)用程序的狀態(tài)保存在一個(gè)中心化的地方,并通過一些方法來修改和查詢狀態(tài)。數(shù)據(jù)流是指數(shù)據(jù)在應(yīng)用程序中的流動(dòng)方式,包括數(shù)據(jù)的來源傳輸、處理存儲(chǔ)等方面。

  • Pinia中,我們可以使用Store來管理應(yīng)用程序的狀態(tài),并使用ActionsGetters來修改和查詢狀態(tài)。Store 是一個(gè)包含狀態(tài)、Actions 和 Getters 的對(duì)象,它可以被多個(gè)組件共享。當(dāng)一個(gè)組件需要修改或查詢狀態(tài)時(shí),它可以通過Store來訪問狀態(tài),并調(diào)用相應(yīng)的ActionsGetters來修改或查詢狀態(tài)。

  • Pinia中,數(shù)據(jù)的流動(dòng)方式非常簡(jiǎn)單和直觀。當(dāng)一個(gè)組件調(diào)用Store中的Actions來修改狀態(tài)時(shí),數(shù)據(jù)會(huì)從組件流向 Store,然后從Store再流向其他組件。當(dāng)一個(gè)組件調(diào)用Store中的Getters來查詢狀態(tài)時(shí),數(shù)據(jù)會(huì)從Store流向組件。這種數(shù)據(jù)流的方式非常清晰和可控,使得我們可以更好地管理和維護(hù)應(yīng)用程序的狀態(tài)。

5. Pinia 的模塊化和命名空間

在 Pinia 中,我們可以使用模塊化和命名空間來組織 Store,以便更好地管理和維護(hù)應(yīng)用程序的狀態(tài)。模塊化和命名空間可以幫助我們將應(yīng)用程序的狀態(tài)分成多個(gè)邏輯模塊,并將其組合成完整的應(yīng)用程序狀態(tài)。這種模塊化和命名空間的方式非常清晰和可控,使得我們可以更好地管理和維護(hù)應(yīng)用程序的狀態(tài)。

5.1. 模塊化

在 Pinia 中,我們可以使用 defineStore 函數(shù)來定義一個(gè) Store。defineStore 函數(shù)可以接受一個(gè)參數(shù)對(duì)象,其中包含了 Store 的狀態(tài)、Actions 和 Getters 等信息。我們可以將多個(gè) defineStore 函數(shù)組合成一個(gè)完整的 Store,以便更好地管理和維護(hù)應(yīng)用程序的狀態(tài)。

import { defineStore } from 'pinia'

const counterStore = defineStore({
  id: 'counter',
  state: () => ({
    count: 0
  }),
  actions: {
    increment() {
      this.count++
    },
    decrement() {
      this.count--
    }
  },
  getters: {
    doubleCount: (state) => state.count * 2,
  },
})

const userStore = defineStore({
  id: 'user',
  state: () => ({
    name: '',
    email: ''
  }),
  actions: {
    setName(name) {
      this.name = name
    },
    setEmail(email) {
      this.email = email
    }
  }
})

export default {
  counterStore,
  userStore
}

在上面的代碼中,我們首先使用 defineStore 函數(shù)定義了一個(gè)名為 counterStore 的 Store,其中包含了計(jì)數(shù)器狀態(tài)和增加和減少計(jì)數(shù)器值的 Actions。然后,我們又使用 defineStore 函數(shù)定義了一個(gè)名為 userStore 的 Store,其中包含了用戶信息狀態(tài)和修改用戶名和電子郵件的 Actions。最后,我們將 counterStoreuserStore 導(dǎo)出為一個(gè)對(duì)象,以便在其他組件中使用。

5.2. 命名空間

在 Pinia 中,我們可以使用命名空間來組織 Store。命名空間可以將多個(gè) Store 分組,并將其組合成完整的應(yīng)用程序狀態(tài)。命名空間可以幫助我們更好地管理和維護(hù)應(yīng)用程序的狀態(tài),避免了狀態(tài)沖突和重復(fù)定義的問題。

import { createPinia } from 'pinia'
import { counterStore } from './counter'
import { userStore } from './user'

const pinia = createPinia()

pinia.useStore('counter', counterStore)
pinia.useStore('user', userStore)

export default pinia

在上面的代碼中,我們首先使用 createPinia 函數(shù)創(chuàng)建了一個(gè) Pinia 實(shí)例,然后使用 useStore 函數(shù)將 counterStoreuserStore 添加到了 Pinia 實(shí)例中,并分別使用了 counteruser 命名空間。這意味著,在其他組件中,我們可以通過 this.$pinia.store.counterthis.$pinia.store.user 來訪問計(jì)數(shù)器 Store 和用戶信息 Store。

6. Pinia 的插件機(jī)制和異步操作

6.1. 插件機(jī)制

在 Pinia 中,我們可以使用插件來擴(kuò)展其功能。插件可以是一個(gè)簡(jiǎn)單的對(duì)象,也可以是一個(gè)包含多個(gè)函數(shù)的對(duì)象。我們可以使用 use 函數(shù)來添加插件。

import { createPinia } from 'pinia'

const pinia = createPinia()
const myPlugin = {
	// ...
}
pinia.use(myPlugin)

在上面的代碼中,我們首先使用 createPinia 函數(shù)創(chuàng)建了一個(gè) Pinia 實(shí)例,然后使用 use 函數(shù)將 myPlugin 添加到了 Pinia 實(shí)例中。

6.2. 異步操作

在 Pinia 中,我們可以使用異步操作來處理一些需要等待的數(shù)據(jù)。異步操作可以是一個(gè) Promise,也可以是一個(gè)異步函數(shù)。我們可以使用 await 關(guān)鍵字來等待異步操作的結(jié)果。

import { defineStore } from 'pinia'

export const useUserStore = defineStore({
  id: 'user',
  state: () => ({
    name: '',
    email: ''
  }),
  actions: {
    async fetchUser() {
      const response = await fetch('/api/user')
      const data = await response.json()
      this.name = data.name
      this.email = data.email
    }
  }
})

在上面的代碼中,我們首先使用 defineStore 函數(shù)定義了一個(gè)名為 useUserStore 的 Store,其中包含了用戶信息狀態(tài)和異步獲取用戶信息的 fetchUser 方法。在 fetchUser 方法中,我們首先使用 fetch 函數(shù)獲取用戶信息的數(shù)據(jù),然后使用 await 關(guān)鍵字等待 fetch 函數(shù)的結(jié)果,并將其解析為 JSON 格式。最后,我們將獲取的數(shù)據(jù)賦值給 Store 的狀態(tài)。文章來源地址http://www.zghlxwxcb.cn/news/detail-467642.html

到了這里,關(guān)于vue 3 第三十一章:狀態(tài)管理(Pinia基礎(chǔ)知識(shí))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【正點(diǎn)原子STM32連載】第三十一章 待機(jī)模式實(shí)驗(yàn) 摘自【正點(diǎn)原子】APM32E103最小系統(tǒng)板使用指南

    1)實(shí)驗(yàn)平臺(tái):正點(diǎn)原子APM32E103最小系統(tǒng)板 2)平臺(tái)購買地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套實(shí)驗(yàn)源碼+手冊(cè)+視頻下載地址: http://www.openedv.com/docs/boards/xiaoxitongban 本章介紹APM32E103低功耗模式中的待機(jī)模式,進(jìn)入待機(jī)模式后,MCU內(nèi)部的電壓調(diào)壓器將斷開1.3V電源域

    2024年01月22日
    瀏覽(157)
  • 前端新手Vue3+Vite+Ts+Pinia+Sass項(xiàng)目指北系列文章 —— 第十一章 基礎(chǔ)界面開發(fā) (組件封裝和使用)

    前端新手Vue3+Vite+Ts+Pinia+Sass項(xiàng)目指北系列文章 —— 第十一章 基礎(chǔ)界面開發(fā) (組件封裝和使用)

    Vue 是前端開發(fā)中非常常見的一種框架,它的易用性和靈活性使得它成為了很多開發(fā)者的首選。而在 Vue2 版本中,組件的開發(fā)也變得非常簡(jiǎn)單,但隨著 Vue3 版本的發(fā)布,組件開發(fā)有了更多的特性和優(yōu)化,為我們的業(yè)務(wù)開發(fā)帶來了更多便利。本文將介紹如何使用 Vue3 開發(fā)業(yè)務(wù)組件

    2024年02月19日
    瀏覽(97)
  • 【正點(diǎn)原子FPGA連載】第三十一章DDR4讀寫測(cè)試實(shí)驗(yàn) 摘自【正點(diǎn)原子】DFZU2EG/4EV MPSoC 之FPGA開發(fā)指南V1.0

    【正點(diǎn)原子FPGA連載】第三十一章DDR4讀寫測(cè)試實(shí)驗(yàn) 摘自【正點(diǎn)原子】DFZU2EG/4EV MPSoC 之FPGA開發(fā)指南V1.0

    1)實(shí)驗(yàn)平臺(tái):正點(diǎn)原子MPSoC開發(fā)板 2)平臺(tái)購買地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套實(shí)驗(yàn)源碼+手冊(cè)+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html DDR4 SDRAM(Double-Data-Rate Fourth Generation Synchronous Dynamic Random Access Memory,簡(jiǎn)稱為DDR4 SDRAM),是一種高速動(dòng)態(tài)隨機(jī)

    2024年01月16日
    瀏覽(27)
  • Vue——狀態(tài)管理庫Pinia

    Vue——狀態(tài)管理庫Pinia

    寫在前面 :本文參考小滿大牛的pinia專欄 Vuex 和 Pinia 均是 Vue.js 的狀態(tài)管理庫,它們?yōu)?Vue 應(yīng)用程序提供了一種集中式的、可預(yù)測(cè)的狀態(tài)管理解決方案。 Vuex 是 Vue.js 官方推薦的狀態(tài)管理庫之一。它的核心概念包括 state、mutation、action 和 getter。其中,state 代表應(yīng)用程序的狀態(tài)

    2024年02月07日
    瀏覽(24)
  • Vue狀態(tài)管理庫-Pinia

    Vue狀態(tài)管理庫-Pinia

    Pinia 是 Vue 的專屬狀態(tài)管理庫,它允許支持跨組件或頁面共享狀態(tài),即共享數(shù)據(jù),他的初始設(shè)計(jì)目的是設(shè)計(jì)一個(gè)支持組合式API的 Vue 狀態(tài)管理庫(因?yàn)関ue3一個(gè)很大的改變就是組合式API),當(dāng)然這并不是說Pinia只支持vue3,他是同時(shí)支持vue2和vue3的, 本文傾向于擁抱Vue3,所以代碼語

    2024年02月22日
    瀏覽(30)
  • Vue使用 Pinia 進(jìn)行狀態(tài)管理

    Pinia 是一個(gè)適用于 Vue.js 的狀態(tài)管理庫,它采用了組合式 API 的理念,使得狀態(tài)管理變得更加簡(jiǎn)單、直觀和靈活。與傳統(tǒng)的 Vuex 相比,Pinia 提供了更好的 TypeScript 支持,同時(shí)也更加適合大型應(yīng)用程序和復(fù)雜狀態(tài)邏輯的管理。 首先,我們需要在 Vue 項(xiàng)目中安裝 Pinia。你可以通過

    2024年02月13日
    瀏覽(36)
  • 【Vue全家桶】Pinia狀態(tài)管理

    【Vue全家桶】Pinia狀態(tài)管理

    ??這里是前端程序員小張! ??人海茫茫,感謝這一秒你看到這里。希望我的文章對(duì)你的有所幫助! ??愿你在未來的日子,保持熱愛,奔赴山海! Pinia開始于大概2019年,其目的是設(shè)計(jì)一個(gè)擁有 組合式 API 的 Vue 狀態(tài)管理庫 目前同時(shí)兼容Vue2、Vue3,也并不要求你使用Compositio

    2023年04月09日
    瀏覽(104)
  • Vue--》探索Pinia:Vue狀態(tài)管理的未來

    Vue--》探索Pinia:Vue狀態(tài)管理的未來

    目錄 Pinia的講解與使用 Pinia的安裝與使用 store數(shù)據(jù)操作 解構(gòu)store數(shù)據(jù)

    2024年02月05日
    瀏覽(19)
  • vue3學(xué)習(xí)-Pinia狀態(tài)管理

    定義一個(gè)Store 這個(gè) name ,也稱為 id ,是必要的,Pinia 使用它來將 store 連接到 devtools。 將返回的函數(shù)命名為 use… 是跨可組合項(xiàng)的約定,以使其符合你的使用習(xí)慣。 使用 store 一旦 store 被實(shí)例化,你就可以直接在 store 上訪問 state 、 getters 和 actions 中定義的任何屬性 store 是一

    2024年02月14日
    瀏覽(17)
  • Vue | Vue.js 全家桶 Pinia狀態(tài)管理

    Vue | Vue.js 全家桶 Pinia狀態(tài)管理

    ??? Vue?.js專欄:Node.js Vue.js 全家桶 Pinia狀態(tài)管理 ????? 個(gè)人簡(jiǎn)介:一個(gè)不甘平庸的平凡人?? ? 個(gè)人主頁:CoderHing的個(gè)人主頁 ?? 格言: ?? 路漫漫其修遠(yuǎn)兮,吾將上下而求索?? ?? 你的一鍵三連是我更新的最大動(dòng)力?? 目錄 一、Pinia和Vuex的對(duì)比 什么是Pinia呢? Pina和

    2024年01月16日
    瀏覽(121)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包