欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3新狀態(tài)管理工具實(shí)例詳解

 更新時間:2022年03月08日 09:11:30   作者:小小熒  
Vue3公布曾經(jīng)有一段時間了,它采納了新的響應(yīng)式零碎,而且構(gòu)建了一套全新的 Composition API,下面這篇文章主要給大家介紹了關(guān)于Vue3新狀態(tài)管理工具的相關(guān)資料,需要的朋友可以參考下

前言

Pinia.js 是新一代的狀態(tài)管理器,由 Vue.js團(tuán)隊(duì)中成員所開發(fā)的,因此也被認(rèn)為是下一代的 Vuex,即 Vuex5.x,在 Vue3.0 的項(xiàng)目中使用也是備受推崇。

Pinia.js 有如下特點(diǎn):

  • 完整的 typescript 的支持;
  • 足夠輕量,壓縮后的體積只有1.6kb;
  • 去除 mutations,只有 state,getters,actions(這是我最喜歡的一個特點(diǎn));
  • actions 支持同步和異步;
  • 沒有模塊嵌套,只有 store 的概念,store 之間可以自由使用,更好的代碼分割;
  • 無需手動添加 store,store 一旦創(chuàng)建便會自動添加;

安裝

npm install pinia --save

創(chuàng)建 Store

新建 src/store 目錄并在其下面創(chuàng)建 index.ts,導(dǎo)出 store

// src/store/index.ts
import { createPinia } from 'pinia'
const store = createPinia()
export default store

在 main.ts 中引入并使用。

// src/main.ts
import { createApp } from 'vue'
import App from './App.vue'
import store from './store'

const app = createApp(App)
app.use(store)

State

定義State

在 src/store 下面創(chuàng)建一個user.ts

//src/store/user.ts
import { defineStore } from 'pinia'

export const useUserStore = defineStore({
  id: 'user', // id必填,且需要唯一
  state: () => {
    return {
      name: '小小熒'
    }
  }
})

獲取 state

<template>
  <div>{{ userStore.name }}</div>
</template>

<script lang="ts" setup>
import { useUserStore } from '@/store/user'

const userStore = useUserStore()
</script>

也可以結(jié)合 computed 獲取。

const name = computed(() => userStore.name)

state 也可以使用解構(gòu),但使用解構(gòu)會使其失去響應(yīng)式,這時候可以用 pinia 的 storeToRefs。

import { storeToRefs } from 'pinia'
const { name } = storeToRefs(userStore)

修改 state

可以像下面這樣直接修改 state

userStore.name = '李四'

但一般不建議這么做,建議通過 actions 去修改 state,action 里可以直接通過 this 訪問。

export const useUserStore = defineStore({
  id: 'user',
  state: () => {
    return {
      name: '張三'
    }
  },
  actions: {
    updateName(name) {
      this.name = name
    }
  }
})
<script lang="ts" setup>
import { useUserStore } from '@/store/user'

const userStore = useUserStore()
userStore.updateName('李四')
</script>

Getters

export const useUserStore = defineStore({
 id: 'user',
 state: () => {
   return {
     name: '張三'
   }
 },
 getters: {
   fullName: (state) => {
     return state.name + '豐'
   }
 }
})
userStore.fullName // 小小熒豐

Actions

異步 action

action 可以像寫一個簡單的函數(shù)一樣支持 async/await 的語法,讓你愉快的應(yīng)付異步處理的場景。

export const useUserStore = defineStore({
  id: 'user',
  actions: {
    async login(account, pwd) {
      const { data } = await api.login(account, pwd)
      return data
    }
  }
})

action 間相互調(diào)用

action 間的相互調(diào)用,直接用 this 訪問即可。

 export const useUserStore = defineStore({
  id: 'user',
  actions: {
    async login(account, pwd) {
      const { data } = await api.login(account, pwd)
      this.setData(data) // 調(diào)用另一個 action 的方法
      return data
    },
    setData(data) {
      console.log(data)
    }
  }
})

在 action 里調(diào)用其他 store 里的 action 也比較簡單,引入對應(yīng)的 store 后即可訪問其內(nèi)部的方法了。

// src/store/user.ts

import { useAppStore } from './app'
export const useUserStore = defineStore({
  id: 'user',
  actions: {
    async login(account, pwd) {
      const { data } = await api.login(account, pwd)
      const appStore = useAppStore()
      appStore.setData(data) // 調(diào)用 app store 里的 action 方法
      return data
    }
  }
})
// src/store/app.ts

export const useAppStore = defineStore({
  id: 'app',
  actions: {
    setData(data) {
      console.log(data)
    }
  }
})

數(shù)據(jù)持久化

插件 pinia-plugin-persist 可以輔助實(shí)現(xiàn)數(shù)據(jù)持久化功能。

安裝

npm i pinia-plugin-persist --save

使用

// src/store/index.ts

import { createPinia } from 'pinia'
import piniaPluginPersist from 'pinia-plugin-persist'

const store = createPinia()
store.use(piniaPluginPersist)

export default store

接著在對應(yīng)的 store 里開啟 persist 即可。

export const useUserStore = defineStore({
  id: 'user',
  state: () => {
    return {
      name: '張三'
    }
  },

  // 開啟數(shù)據(jù)緩存
  persist: {
    enabled: true
  }
})

數(shù)據(jù)默認(rèn)存在 sessionStorage 里,并且會以 store 的 id 作為 key。

自定義 key

你也可以在 strategies 里自定義 key 值,并將存放位置由 sessionStorage 改為 localStorage。

persist: {
  enabled: true,
  strategies: [
    {
      key: 'my_user',
      storage: localStorage,
    }
  ]
}

持久化部分 state

默認(rèn)所有 state 都會進(jìn)行緩存,你可以通過 paths 指定要持久化的字段,其他的則不會進(jìn)行持久化。

state: () => {
  return {
    name: '張三',
    age: 18,
    gender: '男'
  }  
},

persist: {
  enabled: true,
  strategies: [
    {
      storage: localStorage,
      paths: ['name', 'age']
    }
  ]
}

上面我們只持久化 name 和 age,并將其改為localStorage, 而 gender 不會被持久化,如果其狀態(tài)發(fā)送更改,頁面刷新時將會丟失,重新回到初始狀態(tài),而 name 和 age 則不會。

最后

以上就是關(guān)于 Pinia.js 用法的一些介紹,Pinia.js 的內(nèi)容還遠(yuǎn)不止這些,更多內(nèi)容及使用有待大家自己探索。Pinia文檔

到此這篇關(guān)于Vue3新狀態(tài)管理工具的文章就介紹到這了,更多相關(guān)Vue3新狀態(tài)管理工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue開發(fā)環(huán)境中修改端口號的實(shí)現(xiàn)方法

    Vue開發(fā)環(huán)境中修改端口號的實(shí)現(xiàn)方法

    這篇文章主要介紹了Vue開發(fā)環(huán)境中修改端口號的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue + ts實(shí)現(xiàn)輪播插件的示例

    Vue + ts實(shí)現(xiàn)輪播插件的示例

    這篇文章主要介紹了Vue + ts實(shí)現(xiàn)輪播插件的示例,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-11-11
  • 解決VUE-Router 同一頁面第二次進(jìn)入不刷新的問題

    解決VUE-Router 同一頁面第二次進(jìn)入不刷新的問題

    這篇文章主要介紹了解決VUE-Router 同一頁面第二次進(jìn)入不刷新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue中element 的upload組件發(fā)送請求給后端操作

    vue中element 的upload組件發(fā)送請求給后端操作

    這篇文章主要介紹了vue中element 的upload組件發(fā)送請求給后端操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 使用vue for時為什么要key【推薦】

    使用vue for時為什么要key【推薦】

    很多朋友不明白在使用vue for時為什么要key,key的作用有哪些,在文中給大家詳細(xì)介紹,需要的朋友可以參考下
    2019-07-07
  • Vue中使用vue-count-to(數(shù)字滾動插件)詳細(xì)教程

    Vue中使用vue-count-to(數(shù)字滾動插件)詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于Vue中使用vue-count-to(數(shù)字滾動插件)的相關(guān)資料,最近需要開發(fā)一個數(shù)字滾動效果,在網(wǎng)上找到一個關(guān)于vue-countTo的插件,覺得這個插件還不錯,需要的朋友可以參考下
    2023-09-09
  • vue?Router(v3.x)?路由傳參的三種方式場景分析

    vue?Router(v3.x)?路由傳參的三種方式場景分析

    vue?路由傳參的使用場景一般都是應(yīng)用在父路由跳轉(zhuǎn)到子路由時,攜帶參數(shù)跳轉(zhuǎn),傳參方式可劃分為?params?傳參和?query?傳參,而?params?傳參又可分為在?url?中顯示參數(shù)和不顯示參數(shù)兩種方式,這就是vue路由傳參的三種方式,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • vue elementUI tree樹形控件獲取父節(jié)點(diǎn)ID的實(shí)例

    vue elementUI tree樹形控件獲取父節(jié)點(diǎn)ID的實(shí)例

    今天小編就為大家分享一篇vue elementUI tree樹形控件獲取父節(jié)點(diǎn)ID的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue懸浮可拖拽懸浮按鈕的實(shí)例代碼

    vue懸浮可拖拽懸浮按鈕的實(shí)例代碼

    這篇文章主要介紹了vue懸浮可拖拽懸浮按鈕的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 10個Vue3中常用的組合式?API用法詳解

    10個Vue3中常用的組合式?API用法詳解

    通過Vue?3,組合式API增強(qiáng)了我們利用Vue的能力,使我們的代碼更具模塊性和可讀性,本文主要來和大家分享10個常用的Vue3組合式API,希望對大家有所幫助
    2024-01-01

最新評論