最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

這篇文章主要介紹“Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)”,在日常操作中,相信很多人在Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為崗?fù)?/a>等企業(yè)提供專業(yè)服務(wù)。

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

全新的 Vue3 狀態(tài)管理工具:Pinia

Vue3 發(fā)布已經(jīng)有一段時(shí)間了,它采用了新的響應(yīng)式系統(tǒng),而且構(gòu)建了一套全新的 Composition API。Vue 的周邊生態(tài)都在加緊適配這套新的系統(tǒng),官方的狀態(tài)管理庫(kù) Vuex 也在適配中,為此官方提出了一個(gè) Vuex 5 的全新提案。

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

在這個(gè)提案下方,有個(gè)評(píng)論很有意思。簡(jiǎn)單翻譯一下:

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

好巧不巧,Vuex5 的提案,與 Pinia 實(shí)現(xiàn)的功能不能說(shuō)毫無(wú)關(guān)系,只能說(shuō)一模一樣,今天的文章就來(lái)給大家介紹一下這個(gè)菠蘿。

安裝

在現(xiàn)有項(xiàng)目中,用過(guò)如下命令進(jìn)行 Pinia 模塊的安裝。

# yarn
yarn add pinia@next
# npm
npm i pinia@next

安裝完成后,需要在 Vue3 項(xiàng)目的入口文件中,進(jìn)行導(dǎo)入安裝。

// main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

// 實(shí)例化 Vue
const app = createApp(App)
// 安裝 Pinia
app.use(createPinia())
// 掛載在真實(shí) DOM
app.mount('#app')

上手

要使用 Pinia 的話,只需要定義一個(gè) store,然后在用到該數(shù)據(jù)的地方進(jìn)行導(dǎo)入。

定義 Store

import { defineStore } from "pinia"

// 對(duì)外部暴露一個(gè) use 方法,該方法會(huì)導(dǎo)出我們定義的 state
const useCounterStore = defineStore({
  // 每個(gè) store 的 id 必須唯一
  id: 'counter',
  // state 表示數(shù)據(jù)源
  state: () => ({
    count: 0
  }),
  // getters 類似于 computed,可對(duì) state 的值進(jìn)行二次計(jì)算
  getters: {
    double () {
        // getter 中的 this 指向 state
        return this.count * 2
      },
      // 如果使用箭頭函數(shù)會(huì)導(dǎo)致 this 指向有問(wèn)題
      // 可以在函數(shù)的第一個(gè)參數(shù)中拿到 state
    double: (state) => {
        return state.count * 2
      }
  },
  // actions 用來(lái)修改 state
  actions: {
    increment() {
      // action 中的 this 指向 state
      this.count++
    },
  }
})

export default useCounterStore

除了使用上述類似 vuex 的方式來(lái)構(gòu)建 state,還可以使用 function 的形式來(lái)創(chuàng)建 store,有點(diǎn)類似于 Vue3 中的 setup()。

import { ref, computed } from "vue"
import { defineStore } from "pinia"

// 對(duì)外部暴露一個(gè) use 方法,該方法會(huì)導(dǎo)出我們定義的 state
const useCounterStore = defineStore('counter', function () {
  const count = ref(0)
  const double = computed(() => count.value * 2)
  function increment() {
    count.value++
  }
  return {
      count, double, increment
  }
})

export default useCounterStore

使用 Store

前面也介紹過(guò),Pinia 提供了兩種方式來(lái)使用 store,Options ApiComposition Api 中都完美支持。

Options Api

Options Api 中,可直接使用官方提供的 mapActionsmapState 方法,導(dǎo)出 store 中的 state、getter、action,其用法與 Vuex 基本一致,很容易上手。

import { mapActions, mapState } from 'pinia'
import { useCounterStore } from '../model/counter'

export default {
  name: 'HelloWorld',
  computed: {
    ...mapState(useCounterStore, ['count', 'double'])
  },
  methods: {
    ...mapActions(useCounterStore, ['increment'])
  }
}

Composition Api

Composition Api 中,不管是 state 還是 getter 都需要通過(guò) computed 方法來(lái)監(jiān)聽(tīng)變化,這和 Options Api 中,需要放到 computed 對(duì)象中的道理一樣。另外, Options Api  中拿到的 state 值是可以直接進(jìn)行修改操作的,當(dāng)然還是建議寫(xiě)一個(gè) action 來(lái)操作 state 值,方便后期維護(hù)。

// Composition Api
import { computed } from 'vue'
import { useCounterStore } from '../stores/counter'
export default {
  name: 'HelloWorld',
  setup() {
    const counter = useCounterStore()
    return {
      // state 和 getter 都需要在使用 computed,這和 Options Api 一樣
      count: computed(() => counter.count),
      double: computed(() => counter.double),
      increment: () => { counter.count++ }, // 可以直接修改 state 的值
      increment: counter.increment, // 可以引用 store 中定義的 action
    }
  }
}

類型提示

在 Vuex 中,TypeScript 的類型提示做得不是很好,在進(jìn)行類型推導(dǎo)時(shí),只能找到它的 state。特別是寫(xiě)代碼的過(guò)程中,代碼提示就很不智能。

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

而 pinia,就能推導(dǎo)出定義的所有 state、getter、action,這樣在寫(xiě)代碼的時(shí)候,就會(huì)方便很多。

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

主要是 pinia 通過(guò) TypeScript 進(jìn)行了十分友好的類型定義,感興趣的可以看看 pinia 的類型定義文件(pinia.d.ts):

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

代碼分割

由于使用了模塊化設(shè)計(jì),所有的 store 都能夠單獨(dú)引入,而不是像 vuex 一樣,通過(guò) modules 的方式,將所有的 module 掛載到一個(gè) store 上。

假設(shè),我們當(dāng)前通過(guò) Vuex 創(chuàng)建了一個(gè) Store,這個(gè) Store 下有兩個(gè) module,分別是用戶模塊(User)和商品模塊(Goods)。即使當(dāng)前首頁(yè)只使用到了用戶信息,但是整個(gè) Store 都會(huì)被打包到首頁(yè)的 js chunk 中。

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

如果我們使用 pinia,我們會(huì)使用 defineStore 定義兩個(gè) 完全是分離狀態(tài)的 store,兩個(gè)頁(yè)面在引入時(shí),也互不影響。最后打包的時(shí)候,首頁(yè)的 js chunk 和商品頁(yè)的 js chunk 會(huì)分別打包對(duì)應(yīng)的 store。

Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)

Pinia 的介紹到這里就告一段落了,如果現(xiàn)在有新項(xiàng)目要使用 Vue3 進(jìn)行開(kāi)發(fā),推薦無(wú)腦使用 Pinia,更加簡(jiǎn)潔,而且大小僅 1KB。

到此,關(guān)于“Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


分享題目:Vue3全新?tīng)顟B(tài)管理工具是哪個(gè)
鏈接分享:
http://fisionsoft.com.cn/article/peecgd.html