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

Vue狀態(tài)管理之使用Pinia代替Vuex

 更新時(shí)間:2021年11月08日 09:37:26   作者:rogepi  
這篇文章主要介紹了Vue狀態(tài)管理。下面文章主要圍繞著使用Pinia代替Vuex的相關(guān)資料展開具體內(nèi)容,需要的朋友可以參考一下,希望對(duì)你有所幫助

1、Pinia是什么

Pinia是一個(gè)vue的狀態(tài)管理方案,是vuex團(tuán)隊(duì)成員開發(fā),實(shí)現(xiàn)了很多vuex5的提案,更加地輕量化且有devtools的支持

vuex4一直被人詬病對(duì)于typescript的支持不良好,vuex5也遲遲未來

所以有了pinia的出現(xiàn)

相較于vuex:

  • pinia無需創(chuàng)建復(fù)雜的包裝器來支持typescript,對(duì)于typescript類型判斷是天然支持的,享受ide帶來的自動(dòng)補(bǔ)全,減少開發(fā)的心智負(fù)擔(dān),減少vue開發(fā)過程中的面向字符串編程
  • 減去了mutations的概念,只保留state,gettersanctions三個(gè)概念,減少代碼冗余
  • 無需手動(dòng)添加store,創(chuàng)建的store會(huì)在使用時(shí)自動(dòng)添加
  • 沒有模塊module的概念,不用面對(duì)一個(gè)store下嵌套著許多模塊,使用單文件store(有點(diǎn)類似redux/toolkit的一個(gè)reducer),可以直接導(dǎo)入其他store使用

Pinia文檔有這么一段話:

Pinia 試圖盡可能接近 Vuex 的理念。 它旨在測試 Vuex 下一次迭代的提案,并且取得了成功,因?yàn)槲覀兡壳坝幸粋€(gè)針對(duì) Vuex 5 的開放 RFC,其 API 與 Pinia 使用的 API 非常相似。 請(qǐng)注意,我(Eduardo),Pania 的作者,是 Vue.js 核心團(tuán)隊(duì)的一員,并積極參與了 Router 和 Vuex 等 API 的設(shè)計(jì)。 我個(gè)人對(duì)這個(gè)項(xiàng)目的意圖是重新設(shè)計(jì)使用全局 Store 的體驗(yàn),同時(shí)保持 Vue 平易近人的哲學(xué)。 我讓 Pania 的 API 與 Vuex 一樣接近,因?yàn)樗粩嘞蚯鞍l(fā)展,以便人們可以輕松地遷移到 Vuex 或什至在未來融合兩個(gè)項(xiàng)目(在 Vuex 下)。

所以現(xiàn)在學(xué)習(xí)Pinia,相當(dāng)于提前學(xué)習(xí)Vuex5就是說

2、Pinia簡單上手

首先我們初始化一個(gè)vite+vue+ts工程

pnpm create vite pinia-demo -- --template vue-ts

安裝pinia

pnpm i pinia

打開項(xiàng)目,編輯src目錄下的mian.ts文件,引入Pinia

// main.ts
​
import { createApp } from 'vue'
import App from './App.vue'
​
import { createPinia } from 'pinia'
​
createApp(App).use(createPinia()).mount('#app')

src目錄下創(chuàng)建一個(gè)store文件夾用來存放狀態(tài)管理,然后新建一個(gè)counter.ts,我們來做一個(gè)簡單的計(jì)數(shù)器狀態(tài)應(yīng)用

import { defineStore } from 'pinia'
​
export const useCounterStore = defineStore('counter', {
  state: () => {
    return {
      count: 0,
    }
  },
  getters: {
    doubleCount: (state) => state.count * 2,
  },
  actions: {
    increment() {
      this.count++
    },
  },
})

Pinia通過defineStore函數(shù)來創(chuàng)建一個(gè)store,它接收一個(gè)id用來標(biāo)識(shí)store,以及store選項(xiàng)

我們也可以使用一個(gè)回調(diào)函數(shù)來返回options,回調(diào)函數(shù)體內(nèi)的寫法類似vuesetup()寫法,比如上面的定義可以寫成

export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  function doubleCount() {
    return count.value * 2
  }
  function increment() {
    count.value++
  }
​
  return { count, increment }
})

接著我們?cè)?code>App.vue中使用store

<script setup lang="ts">
import { useCounterStore } from './store/counter'
const useCounter = useCounterStore()
</script>
​
<template>
  <h2>{{ useCounter }}</h2>
  <h2>{{ useCounter.count }}</h2>
  <h2>{{ useCounter.doubleCount() }}</h2>
  <button @click="useCounter.increment">increment</button>
</template>
​
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

在使用Pinia的過程中可以發(fā)現(xiàn)自動(dòng)補(bǔ)全是相當(dāng)優(yōu)秀

瀏覽器運(yùn)行如下:

打開開發(fā)者工具查看vue devtool

vue devtool支持對(duì)Pinia狀態(tài)的增刪改查!

Pinia有多種對(duì)狀態(tài)的修改方式:

  • 使用actions,如上面所示
  • 直接在狀態(tài)上修改
const countPlus_1 = useCounter.count++

使用store$patch函數(shù),支持選項(xiàng)和回調(diào)函數(shù)兩種寫法,回調(diào)函數(shù)適用于狀態(tài)為數(shù)組或其他之類的需要調(diào)用狀態(tài)方法進(jìn)行修改

const countPlus_2 = useCounter.$patch({ count: useCounter.count + 1 })

const countPlus_3 = useCounter.$patch((state) => state.count++)

對(duì)狀態(tài)的結(jié)構(gòu)需要使用StoreToRefs函數(shù)

const { count } = storeToRefs(useCounter)

3、使用體驗(yàn)

Pinia的學(xué)習(xí)和使用是相當(dāng)友好的,看一遍官方文檔就能上手,在上手過程中可以明顯地感受到相對(duì)于vuex更加快捷,編碼體驗(yàn)優(yōu)秀。

狀態(tài)管理對(duì)于小項(xiàng)目來說更注重于方便和快捷(甚至可以不想需要),所以像vuex是稍微有些復(fù)雜了,像vue3出beta的時(shí)候就有人說可以使用組合式api比如provideinject配合來替代vuex,所以Pinia這個(gè)輕量級(jí)狀態(tài)管理方案的出現(xiàn)是相當(dāng)及時(shí)的。

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

相關(guān)文章

  • vue props 一次傳多個(gè)值實(shí)例

    vue props 一次傳多個(gè)值實(shí)例

    這篇文章主要介紹了vue props 一次傳多個(gè)值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue3使用canvas的詳細(xì)指南

    vue3使用canvas的詳細(xì)指南

    這篇文章主要給大家介紹了關(guān)于vue3使用canvas的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • vue-router命名路由和編程式路由傳參講解

    vue-router命名路由和編程式路由傳參講解

    今天小編就為大家分享一篇關(guān)于vue-router命名路由和編程式路由傳參講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 打包組件報(bào)錯(cuò):Error:Cannot?find?module?'vue/compiler-sfc'

    打包組件報(bào)錯(cuò):Error:Cannot?find?module?'vue/compiler-sfc&ap

    最近遇到這樣的問題,vue組件庫搭建過程中使用webpack打包組件時(shí)報(bào)錯(cuò),本文給大家分享打包組件報(bào)錯(cuò):Error:?Cannot?find?module?‘vue/compiler-sfc‘的解決方法,感興趣的朋友一起看看吧
    2023-12-12
  • Vue.js組件tabs實(shí)現(xiàn)選項(xiàng)卡切換效果

    Vue.js組件tabs實(shí)現(xiàn)選項(xiàng)卡切換效果

    這篇文章主要為大家詳細(xì)介紹了Vue.js組件tabs實(shí)現(xiàn)選項(xiàng)卡切換效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Vue動(dòng)態(tài)加載ECharts圖表數(shù)據(jù)的方式

    Vue動(dòng)態(tài)加載ECharts圖表數(shù)據(jù)的方式

    這篇文章主要介紹了Vue動(dòng)態(tài)加載ECharts圖表數(shù)據(jù)的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue中nextTick函數(shù)和react類似實(shí)現(xiàn)代碼

    vue中nextTick函數(shù)和react類似實(shí)現(xiàn)代碼

    Vue 3 中的 nextTick 主要通過 Promise 實(shí)現(xiàn)異步調(diào)度,返回一個(gè) Promise 對(duì)象,這篇文章主要介紹了vue中nextTick函數(shù)和react類似實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2024-04-04
  • vue-cli 打包使用history模式的后端配置實(shí)例

    vue-cli 打包使用history模式的后端配置實(shí)例

    今天小編就為大家分享一篇vue-cli 打包使用history模式的后端配置實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue3.2中setup語法糖的使用教程分享

    Vue3.2中setup語法糖的使用教程分享

    這篇文章主要為大家詳細(xì)介紹了Vue3.2中setup語法糖的具體使用方法,文中的示例代碼講解詳細(xì),對(duì)我們深入了解Vue有一定的幫助,需要的可以參考一下
    2023-05-05
  • vue 移動(dòng)端注入骨架屏的配置方法

    vue 移動(dòng)端注入骨架屏的配置方法

    骨架屏就是在頁面未渲染完成的時(shí)候,先用一些簡單的圖形大致勾勒出頁面的基本輪廓,給用戶帶來更好的體驗(yàn)。這篇文章主要介紹了vue 移動(dòng)端注入骨架屏,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

阿勒泰市| 余庆县| 沭阳县| 麦盖提县| 新乡市| 雷山县| 泰兴市| 于都县| 丘北县| 济阳县| 石狮市| 兰溪市| 斗六市| 盐源县| 辽宁省| 高雄市| 大港区| 湟中县| 区。| 桑日县| 翁源县| 迁安市| 馆陶县| 诏安县| 嘉峪关市| 淮滨县| 麻栗坡县| 金湖县| 东阳市| 马山县| 万盛区| 东光县| 宁安市| 柘城县| 许昌市| 酒泉市| 孝义市| 突泉县| 涞水县| 收藏| 万全县|