最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3中pinia的使用與持久化處理詳解

 更新時間:2023年07月28日 14:53:44   作者:不禿大師  
Pinia?是一個基于?Vue?3?的狀態(tài)管理庫,可以更好地支持?TypeScript?和更靈活的狀態(tài)管理方式,本文主要介紹了pinia的使用與持久化處理,需要的可以參考一下

簡單記錄一下學(xué)習(xí)pinia的過程

1.Pinia是什么?

Pinia 是一個基于 Vue 3 的狀態(tài)管理庫。 與 Vue 2 中的 Vuex 不同,Pinia 使用了 Vue 3 中的 Composition API,因此可以更好地支持 TypeScript 和更靈活的狀態(tài)管理方式。

2.Pinia有什么特點?

  • 簡單并且易于使用,它的 API 設(shè)計是針對 Composition API 的,因此可以方便地使用 Vue 3 的新特性。
  • 支持 TypeScript,并且提供了強(qiáng)類型的定義,可以在編譯時捕獲錯誤。
  • 支持插件機(jī)制,可以輕松地擴(kuò)展它的功能。
  • 支持多個 store 實例,每個 store 實例都可以擁有自己的狀態(tài)和行為。
  • 支持持久化存儲,可以將 store 中的數(shù)據(jù)保存在本地存儲中,以便在頁面刷新后仍然可以訪問。

服用方法

1.安裝 pinia

bashyarn add pinia#或者使用 npmnpm install pinia

2.在 main.ts/js文件里面進(jìn)行配置

import { createApp } from 'vue'
++ import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
import './assets/main.css'
const app = createApp(App)
++ const pinia = createPinia()
++ app.use(pinia)
app.use(router)
app.mount('#app')

在main.ts/js文件內(nèi)引入Pinia的createPinia()函數(shù)

import { createPinia } from 'pinia'

并且使用createApp(App).use()傳遞給應(yīng)用。

const pinia = createPinia()
app.use(pinia)

3.創(chuàng)建 Pinia 存儲 在你的應(yīng)用程序中,你需要創(chuàng)建一個 Pinia 存儲來管理你的狀態(tài)。你可以使用 createPinia() 函數(shù)來創(chuàng)建一個 Pinia 實例

在src目錄下新建/stores/counter.js 文件.

import { ref, computed } from "vue";
import { defineStore } from "pinia";
// 選項式寫法
// export const useCounterStore = defineStore(
//   "counter",
//   {
//     state: () => ({ count: 0 }),
//     // state: () => {
//     //   return { count: 0 }
//     // },
//     actions: {
//       increment() {
//         this.count++;
//       },
//     },
//   }
// );
// 組合式寫法 
export const useCounterStore = defineStore(
  "counter",
  () => {
    const count = ref(0);
    const increment =()=> {
      count.value++;
    }
    return {
      count,
      increment
    };
  },
  {
  //...更多配置
  }
);

由于Pinia支持Composition API 所以平時會用組合式寫法。 在上面代碼中defineStore有三個參數(shù):

  • 第一個參數(shù):storeName 類型:String 描述:store的名稱。標(biāo)識該store的唯一性
  • 第二個參數(shù):setup 類型: () => StoreDefinition<State, Getters, Actions, StoreOptions>描述:類似Vue組件中setup()函數(shù)
  • 第三個參數(shù):storestoreOptions(可選) 類型:StoreOptions 描述:一個對象,包含一些 store 的選項

簡單來說 第一個參數(shù)像是一個id 給某個store綁定上,給這個倉庫唯一化。 第二個參數(shù)規(guī)定了倉庫里面的初始值以及變化值。第三個參數(shù) 是個配置選項,例如 persist(是否啟用持久化存儲)、devtools(是否啟用開發(fā)工具)等。 最后使用export 拋出useCounterStore 方法

4.Pinia的使用 在組件中使用Pinia

<script setup>
++ import { useCounterStore } from '@/stores/counter'
++ const counter = useCounterStore()
++ const clickHanlde=()=>{
++  counter.increment()
++ }
</script>
<template>
  <!-- 直接從 store 中訪問 state -->
++  <div>Current Count: {{ counter.count }}</div>
++  <button @click="clickHanlde">加1</button>
</template>
<style scoped>
</style>

從剛才定義的counter.js文件里引入useCounterStore()方法 打印了一下 發(fā)現(xiàn)控制臺可以正常拿到響應(yīng)式數(shù)據(jù) 

并且定義一個變量存儲。同時定義一個點擊事件的函數(shù)

import { useCounterStore } from '@/stores/counter'
const counter = useCounterStore()
const clickHanlde=()=>{
  counter.increment()
}

在這個 clickHandle函數(shù)里面 使用counter中我們定義的action 叫做"increment"的方法

使用 template模板寫頁面

<template>
  <!-- 直接從 store 中訪問 state -->
  <div>Current Count: {{ counter.count }}</div>
  <button @click="clickHanlde">增加</button>
</template>

在模板里面使用{{ counter.xxx }}可以正常取到我們放入pinia的數(shù)據(jù) 此時 當(dāng)點擊按鈕“加1”時 store里面的count會在原來的基礎(chǔ)上++

我們發(fā)現(xiàn)此時count 已經(jīng)增加了

此時刷新瀏覽器,發(fā)現(xiàn)count還是為0,瀏覽器并沒有替我們將count 放在 儲存空間內(nèi)。

解決方案:由于pinia里沒有自帶的持久化存儲,所以我們需要使用要持久化存儲的插件 pinia-plugin-persistedstate npm地址:pinia-plugin-persistedstate 文檔入口:pinia-plugin-persistedstate

1.安裝 pinia-plugin-persistedstate 插件

npm i pinia-plugin-persistedstate
#或者使用 npm
yarn add pinia-plugin-persistedstate

2.安裝完成后 需要在main.ts/js文件內(nèi)進(jìn)行配置

import { createApp } from 'vue'
import { createPinia } from 'pinia'
++ import piniaPluginPersistedstate  from 'pinia-plugin-persistedstate'
import App from './App.vue'
import router from './router'
import './assets/main.css'
const app = createApp(App)
const pinia = createPinia()
++ pinia.use(piniaPluginPersistedstate)
app.use(pinia)
app.use(router)
app.mount('#app')

引入了piniaPluginPersistedstate 并且使用app.use()傳遞給了應(yīng)用程序。

3.最后再store里面添加配置選項

import { ref, computed } from "vue";
import { defineStore } from "pinia";
// 選項式寫法
// export const useCounterStore = defineStore(
//   "counter",
//   {
//     state: () => ({ count: 0 }),
//     // state: () => {
//     //   return { count: 0 }
//     // },
//     // 也可以這樣定義
//     // state: () => ({ count: 0 })
++//     persist: true,
//     actions: {
//       increment() {
//         this.count++;
//       },
//     },
//   }
// );
// 組合式寫法 
export const useCounterStore = defineStore(
  "counter",
  () => {
    const count = ref(0);
    const increment =()=> {
      count.value++;
    }
    return {
      count,
      increment
    };
  },
  {
++    persist: true,
  },
);

也就是傳說中defineStore的第三個參數(shù)里面的配置項

此時pinia已經(jīng)可以正常使用替我們存儲數(shù)據(jù) 并且也完成了持久化的配置

以上就是Vue3中pinia的使用與持久化處理詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue3 pinia的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue實現(xiàn)前端列表拖拽功能

    vue實現(xiàn)前端列表拖拽功能

    這篇文章主要為大家詳細(xì)介紹了如何利用vue實現(xiàn)前端列表拖拽功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2023-12-12
  • 在vue3中使用icon圖標(biāo)的三種方案

    在vue3中使用icon圖標(biāo)的三種方案

    這篇文章主要介紹了三種使用icon的方案,分別是element-icon、svg-icon、@iconify/vue,三種方案通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • vue 封裝 Adminlte3組件的實現(xiàn)

    vue 封裝 Adminlte3組件的實現(xiàn)

    這篇文章主要介紹了vue 封裝 Adminlte3組件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • vue數(shù)據(jù)傳遞--我有特殊的實現(xiàn)技巧

    vue數(shù)據(jù)傳遞--我有特殊的實現(xiàn)技巧

    這篇文章主要介紹了vue數(shù)據(jù)傳遞一些特殊梳理技巧,需要的朋友可以參考下
    2018-03-03
  • vue中data的基礎(chǔ)匯總

    vue中data的基礎(chǔ)匯總

    這篇文章主要介紹了vue如何重置data、組件中的data為什么是一個函數(shù)、為什么new Vue里的data可以是一個對象,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vite處理html模板插件之vite-plugin-html插件使用

    Vite處理html模板插件之vite-plugin-html插件使用

    這篇文章主要給大家介紹了關(guān)于Vite處理html模板插件之vite-plugin-html插件使用的相關(guān)資料,Vite是一個現(xiàn)代化的前端構(gòu)建工具,而vite-plugin-html是Vite的一個插件,用于在構(gòu)建時自動生成HTML文件,需要的朋友可以參考下
    2023-10-10
  • vue3中使用router路由實現(xiàn)跳轉(zhuǎn)傳參的方法

    vue3中使用router路由實現(xiàn)跳轉(zhuǎn)傳參的方法

    這篇文章主要介紹了vue3中使用router路由實現(xiàn)跳轉(zhuǎn)傳參的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Vue $mount實戰(zhàn)之實現(xiàn)消息彈窗組件

    Vue $mount實戰(zhàn)之實現(xiàn)消息彈窗組件

    這篇文章主要介紹了Vue $mount實現(xiàn)消息彈窗組件的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue中this.$message的實現(xiàn)過程詳解

    vue中this.$message的實現(xiàn)過程詳解

    Message在開發(fā)中的使用頻率很高,也算是Element-UI組件庫中比較簡單的,對于感興趣的朋友可以一起探討一下Message組件的實現(xiàn),本文詳細(xì)介紹了vue中this.$message的實現(xiàn)過程,感興趣的同學(xué)可以參考一下
    2023-04-04
  • elementplus el-table(行列互換)轉(zhuǎn)置的兩種方法

    elementplus el-table(行列互換)轉(zhuǎn)置的兩種方法

    本文主要介紹了elementplus el-table(行列互換)轉(zhuǎn)置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06

最新評論

封丘县| 衡阳县| 宣恩县| 正宁县| 剑阁县| 彝良县| 张家港市| 博白县| 凤山市| 荆门市| 宾川县| 涞源县| 建瓯市| 邹城市| 名山县| 蓬莱市| 安仁县| 湾仔区| 海盐县| 安乡县| 阿拉善盟| 梁河县| 扎鲁特旗| 敦化市| 醴陵市| 永修县| 元朗区| 鄂托克前旗| 阳高县| 突泉县| 土默特右旗| 永丰县| 千阳县| 防城港市| 集安市| 大方县| 喀喇沁旗| 思茅市| 米林县| 东丰县| 巧家县|