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

Vue狀態(tài)管理工具Pinia的安裝與使用教程

 更新時(shí)間:2024年03月13日 09:55:35   作者:Dorable_Wander  
這篇文章主要介紹了Vue狀態(tài)管理工具Pinia的安裝與使用,一步一步學(xué)習(xí)如何將pinia運(yùn)用到項(xiàng)目實(shí)戰(zhàn)中去,文中有詳細(xì)的安裝教程和使用方法,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下

一、環(huán)境搭建

1.創(chuàng)建項(xiàng)目

環(huán)境搭建還是沿用vite構(gòu)建項(xiàng)目的方法,不知道怎么構(gòu)建的小伙伴可以去vue專欄找找看哦~(用vite構(gòu)建vue項(xiàng)目還是非常輕量快捷的!!強(qiáng)烈推薦使用?。?/strong>)
我們依然使用npm包指令來(lái)使用vite構(gòu)建項(xiàng)目,在命令行輸入以下指令即可

npm init vite

輸入后根據(jù)提示選擇vue項(xiàng)目,選擇TypeScript語(yǔ)言構(gòu)建項(xiàng)目即可。

2.安裝pinia

安裝pinia的方法有很多,可以用npm,可以用yarn,我們還是沿用npm包進(jìn)行安裝。

npm install pinia

在命令行輸入以上指令后,等待安裝成功即可。安裝成功后,在package.json文件中,查看下載的依賴,如果有pinia和對(duì)應(yīng)的版本號(hào),即為下載成功。

二、基本使用

創(chuàng)建完vue項(xiàng)目并且成功安裝pinia之后,我們首先要做的,一定要?jiǎng)?chuàng)建pinia實(shí)例,并將其全局掛載?。。?strong>不論是pinia還是其他的依賴,只要你需要使用,并且使用頻率很頻繁,都建議全局掛載

1.創(chuàng)建pinia示例并掛載

// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
// 創(chuàng)建pinia實(shí)例
const pinia = createPinia()
// 掛載到根實(shí)例上
createApp(App).use(pinia).mount('#app')

2.基本使用

訪問(wèn)state

我們可以直接通過(guò)state.訪問(wèn)

const store = useStore()
store.counter++

使用getters

要注意,在pinia中,Getters和state里面不能使用相同的名字

export const useStore = defineStore('main', {
  state: () => ({
    counter: 0,
  }),
  getters: {
    doubleCount: (state) => state.counter * 2,
  },
})

使用actions

export const useStore = defineStore('main', {
  state: () => ({
    counter: 0,
  }),
  actions: {
    increment() {
      this.counter++
    },
    randomizeCounter() {
      this.counter = Math.round(100 * Math.random())
    },
  },
})

3.詳細(xì)示例(詳細(xì)注解)

// store/index.ts
import { defineStore } from "pinia"

// 1.定義并導(dǎo)出容器
// 參數(shù)1:容器的ID,必須唯一,將來(lái)Pinia會(huì)把所有的容器掛載到根容器,每個(gè)容器的名字就是這里的ID
export const useMainStore = defineStore('main', {
  /**
   * 類似與組件的data, 用來(lái)存儲(chǔ)全局狀態(tài)
   * 1.必須是函數(shù):這樣是為了在服務(wù)端渲染的時(shí)候避免交叉請(qǐng)求導(dǎo)致的數(shù)據(jù)狀態(tài)污染(客戶端其實(shí)無(wú)所謂)
   * 2.必須是箭頭函數(shù):為了更好的ts類型推導(dǎo)
   * 返回值:一個(gè)函數(shù),調(diào)用該函數(shù)即可得到容器實(shí)例
   */
  state: () => {
    return {
      count: 100,
      foo: 'bar',
      arr: [1, 2, 3]
    }
  },
  /**
   * 類似于組件的computed,用來(lái)封裝計(jì)算屬性,有【緩存】功能
   */
  getters: {
    // 每個(gè)函數(shù)接受一個(gè)可選參數(shù):state狀態(tài)對(duì)象
    // count10(state) {
    //   console.log('count10()調(diào)用了');// 具有緩存功能
    //   return state.count + 10
    // }

    // (不建議)如果不使用state而使用this,此時(shí)就不能對(duì)返回值類型做自動(dòng)推導(dǎo)了,必須手動(dòng)指定
    count10(): number {
      return this.count + 10
    }
  },
  /**
   * 完全類比于Vue2組件中的methods(可以直接用this),用來(lái)【封裝業(yè)務(wù)邏輯】,修改state
   */
  actions: {
    /**
     * 注意??!不能使用箭頭函數(shù)定義actions!!一定要用普通函數(shù)?。?!
     * why?因?yàn)榧^函數(shù)綁定了外部this
     */
    changeState(num: number) {
      // 可以直接使用this,像極了Vue2
      // this.count++
      // this.foo = 'hello'
      // this.arr.push(4)

      // 對(duì)于批量修改,建議使用patch做優(yōu)化
      this.$patch((state) => {
        state.count += num
        state.foo = 'hello'
        state.arr.push(4)
      })
    }
  }
})
// 2.容器中的state

// 3.修改state

// 4.actions的使用

現(xiàn)在我們可以打開App.vue,去掉對(duì)我們沒(méi)用的東西,直接使用項(xiàng)目初始化時(shí)產(chǎn)生的HelloWorld.vue組件。

<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <HelloWorld />
</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>

下面是HelloWorld.vue中的內(nèi)容:

<template>
  <p>{{ mainStore.count }}</p>
  <p>{{ mainStore.foo }}</p>
  <p>{{ mainStore.arr }}</p>
  <p>{{ mainStore.count10 }}</p>
  <p>{{ mainStore.count10 }}</p>
  <p>{{ mainStore.count10 }}</p>
  <hr />
  <p>{{ count }}</p>
  <p>{{ foo }}</p>
  <p>
    <button @click="handleChangeState">修改數(shù)據(jù)</button>
  </p>
</template>

<script lang="ts" setup>
import { storeToRefs } from 'pinia'
import { useMainStore } from '../store'

// 【哪里使用寫哪里】,此時(shí)要在HelloWorld組件中用,那就寫這里。這很Composition API
const mainStore = useMainStore() 

// 禁止!這樣會(huì)喪失響應(yīng)性,因?yàn)閜inia在底層將state用reactive做了處理
// const { count, foo } = mainStore
// 解決方案:將結(jié)構(gòu)出的數(shù)據(jù)做ref響應(yīng)式代理
const { count, foo } = storeToRefs(mainStore)

const handleChangeState = () => {
  // ==============數(shù)據(jù)修改的幾種方式=============
  // 方式一:直接修改
  // mainStore.count++

  // 方式二:使用 $patch(對(duì)象) 批量修改,建議使用,底層做了性能優(yōu)化
  // mainStore.$patch({
  //   count: mainStore.count + 1,
  //   foo: 'hello',
  //   arr: [...mainStore.arr, 4] // 這就不優(yōu)雅了,所以有了方式三
  // })

  // 方式三:使用 $patch(回調(diào)函數(shù)),這個(gè)更優(yōu)雅,墻裂推薦!?。?
  // 回調(diào)函數(shù)中的state參數(shù),就是Store定義時(shí)里面的state!
  // mainStore.$patch((state) => {
  //   state.count++
  //   state.foo = 'hello'
  //   state.arr.push(4)
  // })

  // 方式四:邏輯較為復(fù)雜時(shí),應(yīng)封裝到Store的actions中,并對(duì)外暴露接口
  mainStore.changeState(10)
}
</script>

以上就是關(guān)于pinia安裝和使用的知識(shí)分享,相信看完這篇文章的小伙伴們一定能運(yùn)用這些方法在項(xiàng)目開發(fā)中。當(dāng)然,可能有不足的地方,歡迎大家在評(píng)論區(qū)留言指正!

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

相關(guān)文章

  • vue項(xiàng)目開啟gzip壓縮功能簡(jiǎn)單實(shí)例

    vue項(xiàng)目開啟gzip壓縮功能簡(jiǎn)單實(shí)例

    這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目開啟gzip壓縮功能的相關(guān)資料,gizp壓縮是一種http請(qǐng)求優(yōu)化方式,通過(guò)減少文件體積來(lái)提高加載速度,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • el-select 點(diǎn)擊按鈕滾動(dòng)到選擇框頂部的實(shí)現(xiàn)代碼

    el-select 點(diǎn)擊按鈕滾動(dòng)到選擇框頂部的實(shí)現(xiàn)代碼

    本文通過(guò)實(shí)例代碼給大家分享el-select 點(diǎn)擊按鈕滾動(dòng)到選擇框頂部效果,主要代碼是在visibleChange在這個(gè)popper里面找到.el-select-dropdown__list,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • vue create、vue webpack init創(chuàng)建vue項(xiàng)目產(chǎn)生的項(xiàng)目文件的區(qū)別

    vue create、vue webpack init創(chuàng)建vue項(xiàng)目產(chǎn)生的項(xiàng)目文件的區(qū)別

    這篇文章主要介紹了vue create、vue webpack init創(chuàng)建vue項(xiàng)目產(chǎn)生的項(xiàng)目文件的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue項(xiàng)目獲取url中的參數(shù)(親測(cè)可用)

    Vue項(xiàng)目獲取url中的參數(shù)(親測(cè)可用)

    這篇文章主要介紹了Vue項(xiàng)目獲取url中的參數(shù),本文通過(guò)兩種情況分析給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2022-08-08
  • vue中$refs的用法及作用詳解

    vue中$refs的用法及作用詳解

    這篇文章主要介紹了vue中$refs的用法及作用詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-04-04
  • vue.js入門教程之基礎(chǔ)語(yǔ)法小結(jié)

    vue.js入門教程之基礎(chǔ)語(yǔ)法小結(jié)

    這篇文章我們將學(xué)習(xí)vue.js的基礎(chǔ)語(yǔ)法,對(duì)于大家學(xué)習(xí)vue.js具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看。
    2016-09-09
  • 詳解vue3中如何使用youtube-player

    詳解vue3中如何使用youtube-player

    這篇文章主要為大家介紹了詳解vue3中如何使用youtube-player示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue3中的createApp分析

    vue3中的createApp分析

    這篇文章主要介紹了vue3中的createApp分析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • vue3 template轉(zhuǎn)為render函數(shù)過(guò)程詳解

    vue3 template轉(zhuǎn)為render函數(shù)過(guò)程詳解

    在 Vue 中,template 模板是我們編寫組件的主要方式之一,而 Vue 內(nèi)部會(huì)將這些模板轉(zhuǎn)換為 render 函數(shù),render 函數(shù)是用于創(chuàng)建虛擬 DOM 的函數(shù),通過(guò)它,Vue 能夠高效地追蹤 DOM 的變化并進(jìn)行更新,下面我會(huì)通俗易懂地詳細(xì)解釋 Vue 如何將 template 轉(zhuǎn)換為 render 函數(shù)
    2024-10-10
  • vue如何通過(guò)$router.push傳參數(shù)

    vue如何通過(guò)$router.push傳參數(shù)

    這篇文章主要介紹了vue如何通過(guò)$router.push傳參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

双牌县| 察哈| 徐水县| 措美县| 老河口市| 凌海市| 高州市| 阜阳市| 郸城县| 满城县| 丁青县| 灌云县| 韶山市| 乳源| 玉溪市| 鹤壁市| 盈江县| 灵川县| 嵊州市| 类乌齐县| 光山县| 南靖县| 旬阳县| 绥化市| 长白| 吕梁市| 江门市| 宣武区| 隆尧县| 如皋市| 宜章县| 观塘区| 平湖市| 来凤县| 西昌市| 石屏县| 仁化县| 张家港市| 榆社县| 尚志市| 松阳县|