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

vue使用Pinia的五個(gè)實(shí)用技巧分享

 更新時(shí)間:2023年11月23日 11:01:33   作者:王大冶  
這篇文章主要為大家詳細(xì)介紹了vue中使用Pinia是五個(gè)實(shí)用技巧,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下

1.不要?jiǎng)?chuàng)建無用的 getter

你并不需要為所有事情使用 getter。在 Vuex 中有一個(gè)普遍的誤解,認(rèn)為你應(yīng)該總是通過 getter 訪問狀態(tài)。

這是不正確的

當(dāng)你需要從狀態(tài)中計(jì)算出某些東西時(shí),getter 是有用的,例如,如果你有一個(gè)待辦事項(xiàng)列表,想知道有多少已完成,你可以為此創(chuàng)建一個(gè) getter

在生產(chǎn)代碼中經(jīng)??吹竭^這樣的代碼:

export default Vuex.Store({
  state: () => ({ counter: 0 }),
  getters: {
    // 完全無用的 getter
    getCount: state => state.counter,
  },
})

這在 Vuex 中只是不必要的樣板代碼,在 Pinia 中也是如此。你可以直接訪問狀態(tài):

const counterStore = useCounterStore()
counterStore.counter // 0 ?

PS:大多數(shù)時(shí)候你不需要 storeToRefs()(或 toRef())。你可以直接使用 store,Vue 的響應(yīng)式真的很方便 。

2. 在 Option Stores 中使用組合式函數(shù)

你可以在 option stores 中使用一些組合式函數(shù),特別是那些持有狀態(tài)且可寫的組合式函數(shù)。例如,你可以使用 @vueuse/coreuseLocalStorage() 將一些狀態(tài)存儲(chǔ)在瀏覽器的本地存儲(chǔ)中。

import { useLocalStorage } from '@vueuse/core'
const useAuthStore = defineStore('auth', {
  state: () => ({
    user: useLocalStorage('pinia/user/login', 'alice'),
  }),
})

或者使用 refDebounced() 對(duì) ref 的更改進(jìn)行防抖處理:

import { refDebounced } from '@vueuse/core'
const useSearchStore = defineStore('search', {
  state: () => ({
    user: {
      text: refDebounced(/* ... */),
    },
  }),
})

3.在 Setup Stores 中使用復(fù)雜的組合式函數(shù)

在 Setup stores 中,你可以使用任何你想要的組合式函數(shù)。你可以連接到 websocket、藍(lán)牙處理或甚至游戲手柄!

import { useWebSocket } from '@vueuse/core'
export const useServerInfoStore = defineStore('server-info', () => {
  const { status, data, send, open, close } = useWebSocket('ws://websocketurl')
  return {
    status,
    data,
    send,
    open,
    close,
  }
})

Pinia 會(huì)自動(dòng)識(shí)別哪些是狀態(tài)、getter 或動(dòng)作。記住,必須從 setup 函數(shù)返回所有狀態(tài)屬性。

在 setup stores 中使用 inject()

你可以在 setup stores 中使用 inject() 來訪問應(yīng)用級(jí)別提供的變量,如路由器實(shí)例:

import { useRouter } from 'vue-router'
export const useAuthStore('auth', () => {
  const router = useRouter()
  function logout() {
    // 登出用戶
    return router.push('/login')
  }
  return {
    logout
  }
})

使用嵌套 Stores 創(chuàng)建私有狀態(tài)

setup stores 的一個(gè)黃金規(guī)則是返回每一個(gè)狀態(tài)片段:

export const useAuthStore('auth', () => {
  const user = ref<User | null>(null)
  const token = ref<string | null>(null)
  // 我們必須返回 user 和 token
  return {
    user,
    token,
  }
})

但如果我們想要隱藏一些 store 中的狀態(tài)怎么辦?我們可以創(chuàng)建一個(gè)包含私有狀態(tài)的嵌套 store:

export const usePrivateAuthState('auth-private', () => {
  const token = ref<string | null>(null)
  return {
    token,
  }
})
export const useAuthStore('auth', () => {
  const user = ref<User | null>(null)
  const privateState = usePrivateAuthState()
  privateState.token // 僅在此 store 中可訪問
  return {
    user,
  }
})

在 SSR 中使用僅客戶端狀態(tài)

服務(wù)器端渲染(SSR)是提高應(yīng)用性能的絕佳方式。然而,與僅客戶端應(yīng)用相比,它帶來了一些額外的困難。例如,你無法訪問 window、document 或任何其他特定于瀏覽器的 API,如本地存儲(chǔ)。

在 Option Stores 中,這要求你使用 hydrate 選項(xiàng)告訴 Pinia 某些狀態(tài)不應(yīng)在客戶端上進(jìn)行 hydrate

import { useLocalStorage } from '@vueuse/core'
const useAuthStore = defineStore('auth', {
  state: () => ({
    user: useLocalStorage('pinia/user/login', 'alice'),
  }),
  hydrate(state, initialState) {
    state.user = useLocalStorage('pinia/user/login', 'alice')
  },
})

在 Setup Stores 中,你可以使用 skipHydrate 輔助函數(shù)標(biāo)記某些狀態(tài)為僅客戶端狀態(tài):

import { defineStore, skipHydrate } from 'pinia'
const useAuthStore = defineStore('auth', () => {
  const user = skipHydrate(useLocalStorage('pinia/user/login', 'alice'))
  return { user }
})

到此這篇關(guān)于vue使用Pinia的五個(gè)實(shí)用技巧分享的文章就介紹到這了,更多相關(guān)Pinia技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Vue 中使用Typescript的示例代碼

    在Vue 中使用Typescript的示例代碼

    這篇文章主要介紹了在Vue 中使用Typescript的示例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • vue中的面包屑導(dǎo)航組件實(shí)例代碼

    vue中的面包屑導(dǎo)航組件實(shí)例代碼

    這篇文章主要介紹了vue的面包屑導(dǎo)航組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • vue實(shí)現(xiàn)點(diǎn)擊按鈕下載文件功能

    vue實(shí)現(xiàn)點(diǎn)擊按鈕下載文件功能

    這篇文章主要介紹了vue中點(diǎn)擊按鈕下載文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Vue實(shí)現(xiàn)簡單計(jì)算器案例

    Vue實(shí)現(xiàn)簡單計(jì)算器案例

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡單計(jì)算器案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 使用Webpack提高Vue.js應(yīng)用的方式匯總(四種)

    使用Webpack提高Vue.js應(yīng)用的方式匯總(四種)

    Webpack是開發(fā)Vue.js單頁應(yīng)用程序的重要工具。下面通過四種方式給大家介紹使用Webpack提高Vue.js應(yīng)用,需要的的朋友參考下吧
    2017-07-07
  • v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐

    v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐

    在項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)遇到表單保存的功能,本文主要介紹了v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-05-05
  • 詳解基于vue的移動(dòng)web app頁面緩存解決方案

    詳解基于vue的移動(dòng)web app頁面緩存解決方案

    這篇文章主要介紹了詳解基于vue的移動(dòng)web app頁面緩存解決方案,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-08-08
  • Vue2中Element?UI表單的使用詳解

    Vue2中Element?UI表單的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue2中Element?UI表單的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 探秘Vue異步更新機(jī)制中nextTick的原理與實(shí)現(xiàn)

    探秘Vue異步更新機(jī)制中nextTick的原理與實(shí)現(xiàn)

    nextTick?是?Vue?提供的一個(gè)重要工具,它的作用主要體現(xiàn)在幫助我們更好地處理異步操作,下面就跟隨小編一起來探索一下nextTick的原理與實(shí)現(xiàn)吧
    2024-02-02
  • vue組件實(shí)踐之可搜索下拉框功能

    vue組件實(shí)踐之可搜索下拉框功能

    這篇文章主要介紹了vue實(shí)現(xiàn)可搜索的下拉菜單組件功能,在文中通過實(shí)例代碼給大家補(bǔ)充介紹了vue組件實(shí)踐-可搜索下拉框,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11

最新評(píng)論

达拉特旗| 上犹县| 德惠市| 兴安县| 香港| 刚察县| 阜新市| 辛集市| 军事| 肃宁县| 思茅市| 曲阜市| 澄城县| 莆田市| 景宁| 东乌| 远安县| 固始县| 浦东新区| 永宁县| 西昌市| 延寿县| 华宁县| 丰县| 嘉禾县| 鞍山市| 临颍县| 沙河市| 衡阳市| 清苑县| 汨罗市| 綦江县| 库尔勒市| 吉林省| 沭阳县| 茌平县| 甘洛县| 桑日县| 武山县| 萍乡市| 宁国市|