国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue全家桶進(jìn)階之路39:Vue3 狀態(tài)管理

這篇具有很好參考價(jià)值的文章主要介紹了vue全家桶進(jìn)階之路39:Vue3 狀態(tài)管理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Vue3 的狀態(tài)管理主要是通過(guò) Vuex 4 來(lái)實(shí)現(xiàn)。Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式,它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

在Vue3的狀態(tài)管理中,以下是各個(gè)屬性的作用:

  • state:存儲(chǔ)應(yīng)用程序中的狀態(tài)數(shù)據(jù)。它可以包含任何類型的數(shù)據(jù),包括基本類型、對(duì)象、數(shù)組等??梢酝ㄟ^(guò)commit和dispatch方法來(lái)修改state中的數(shù)據(jù)。
  • getters:允許你基于 store 中的 state 數(shù)據(jù)進(jìn)行計(jì)算。類似于Vue組件中的計(jì)算屬性。通過(guò)getters,我們可以將store中的狀態(tài)數(shù)據(jù)進(jìn)行加工、過(guò)濾、處理后再返回給組件使用,而無(wú)需在組件中手動(dòng)操作state數(shù)據(jù)。
  • mutations:用于修改store中的狀態(tài)數(shù)據(jù)。每個(gè)mutation都有一個(gè)字符串的類型和一個(gè)handler函數(shù)。在handler函數(shù)中,我們可以進(jìn)行同步操作來(lái)修改state中的數(shù)據(jù)。需要注意的是,mutations中的函數(shù)必須是同步函數(shù),否則會(huì)導(dǎo)致狀態(tài)不可預(yù)測(cè)。
  • actions:用于處理異步任務(wù)以及提交mutations。在actions中,我們可以編寫異步代碼,例如向后端API發(fā)送請(qǐng)求獲取數(shù)據(jù)等操作。然后通過(guò)commit方法提交mutation,以更新state中的數(shù)據(jù)。actions中的函數(shù)是可以是異步函數(shù)的,因此我們可以在其中執(zhí)行異步操作。
  • modules:允許我們將store分割成模塊,每個(gè)模塊都有自己的state、mutations、actions、getters等,以便于管理和維護(hù)。每個(gè)模塊都可以有自己的子模塊,形成樹狀結(jié)構(gòu)。

總的來(lái)說(shuō),狀態(tài)管理的主要作用是將組件中的狀態(tài)數(shù)據(jù)集中管理,從而避免了在不同組件之間傳遞大量的數(shù)據(jù)。同時(shí),使用狀態(tài)管理可以使我們更好地組織代碼,將邏輯分離,提高代碼的可維護(hù)性和可讀性。

下面是一個(gè)簡(jiǎn)單的示例,演示了如何在 Vue3 中使用 Vuex 4 來(lái)實(shí)現(xiàn)狀態(tài)管理。

首先,在項(xiàng)目中安裝 Vuex 4:

npm install vuex@next --save

然后,在應(yīng)用程序的入口文件中,創(chuàng)建一個(gè) Vuex store 并導(dǎo)出它:

import { createStore } from 'vuex'

const store = createStore({
  state() {
    return {
      count: 0
    }
  },
  mutations: {
    increment(state) {
      state.count++
    },
    decrement(state) {
      state.count--
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  },
  getters: {
    count(state) {
      return state.count
    }
  }
})

export default store

在上面的示例中,createStore() 函數(shù)用于創(chuàng)建一個(gè) Vuex store。在 state 對(duì)象中,定義了應(yīng)用程序的狀態(tài),這里只定義了一個(gè) count 屬性,并初始化為 0。在 mutations 對(duì)象中,定義了修改狀態(tài)的方法,這里定義了兩個(gè)方法:incrementdecrement。在 actions 對(duì)象中,定義了異步操作的方法,這里定義了一個(gè)名為 incrementAsync 的方法,它在 1 秒后調(diào)用 increment 方法。在 getters 對(duì)象中,定義了計(jì)算屬性的方法,這里定義了一個(gè)名為 count 的計(jì)算屬性。

接著,在應(yīng)用程序的入口組件中,使用 useStore() 函數(shù)來(lái)注入 Vuex store:

<template>
  <div>
    <h1>Count: {{ count }}</h1>
    <button @click="increment">Increment</button>
    <button @click="decrement">Decrement</button>
    <button @click="incrementAsync">Increment Async</button>
  </div>
</template>

<script>
import { defineComponent, useStore } from 'vue'

export default defineComponent({
  setup() {
    const store = useStore()

    const increment = () => {
      store.commit('increment')
    }

    const decrement = () => {
      store.commit('decrement')
    }

    const incrementAsync = () => {
      store.dispatch('incrementAsync')
    }

    return {
      count: store.getters.count,
      increment,
      decrement,
      incrementAsync
    }
  }
})
</script>

在上面的示例中,useStore() 函數(shù)用于注入 Vuex store,并將其賦值給 store 變量。然后,定義了三個(gè)方法:incrementdecrementincrementAsync,它們分別調(diào)用了 Vuex store 中定義的 increment、decrementincrementAsync 方法。在組件的 return 語(yǔ)句中,使用 store.getters.count 訪問(wèn)了計(jì)算屬性 count 的值,以供模塊調(diào)用。

?

?

Vue3提供了一個(gè)新的狀態(tài)管理工具,即Vuex 4。它與Vue3一起使用,可用于在應(yīng)用程序中管理全局狀態(tài)。Vuex 4的設(shè)計(jì)目標(biāo)是在減少樣板代碼的同時(shí)提高開發(fā)人員的工作效率和開發(fā)速度。

與Vuex 3相比,Vuex 4的一個(gè)重要改變是將核心代碼與Vue3的新響應(yīng)式API集成在一起。這意味著你不需要使用getter和setter來(lái)聲明狀態(tài)或修改它們,而可以使用Vue3的新響應(yīng)式API。

import { createStore } from 'vuex'

const counterModule = {
  state() {
    return {
      count: 0
    }
  },
  mutations: {
    increment(state) {
      state.count++
    },
    decrement(state) {
      state.count--
    }
  },
  actions: {
    asyncIncrement(context) {
      setTimeout(() => {
        context.commit('increment')
      }, 1000)
    }
  },
  getters: {
    doubledCount(state) {
      return state.count * 2
    }
  }
}

const store = createStore({
  modules: {
    counter: counterModule
  }
})

export default store

在這個(gè)例子中,我們使用createStore函數(shù)創(chuàng)建一個(gè)新的Vuex store。counterModule是一個(gè)包含計(jì)數(shù)器狀態(tài)的模塊,其中包含一個(gè)state對(duì)象,用于存儲(chǔ)計(jì)數(shù)器值,以及mutationsactionsgetters對(duì)象,用于操作和派生計(jì)數(shù)器狀態(tài)。

最后,我們將計(jì)數(shù)器模塊添加到store中,以便在應(yīng)用程序中訪問(wèn)它?,F(xiàn)在我們已經(jīng)設(shè)置好了Vuex 4 store,我們可以在Vue3應(yīng)用程序中使用它來(lái)管理全局狀態(tài)。

?

?

?

mutations的常用方法:

在Vue.js中,mutations是Vuex中用于修改狀態(tài)的方法。以下是一些常用的mutations方法:

  1. 增加或減少狀態(tài)值:
mutations: {
  increment(state) {
    state.count++;
  },
  decrement(state) {
    state.count--;
  }
}
  1. 更新狀態(tài)值:
mutations: {
  updateName(state, newName) {
    state.name = newName;
  }
}

?

  1. 重置狀態(tài):
mutations: {
  reset(state) {
    state.count = 0;
    state.name = '';
  }
}

?

  1. 更新對(duì)象類型的狀態(tài)屬性:
mutations: {
  updateUserInfo(state, newUserInfo) {
    state.user = { ...state.user, ...newUserInfo };
  }
}

?

  1. 更新數(shù)組類型的狀態(tài)屬性:
mutations: {
  addItem(state, newItem) {
    state.items.push(newItem);
  },
  removeItem(state, index) {
    state.items.splice(index, 1);
  }
}

?

  1. 使用payload來(lái)傳遞數(shù)據(jù):
mutations: {
  updateValue(state, payload) {
    state.value = payload.newValue;
  }
}

?

在這種情況下,payload是一個(gè)包含要傳遞給mutation的數(shù)據(jù)的對(duì)象。

這些是一些常見的mutations方法示例,你可以根據(jù)你的具體需求和應(yīng)用程序的狀態(tài)設(shè)計(jì)自定義的mutations方法。記住,mutations應(yīng)該是同步的,并且只負(fù)責(zé)修改狀態(tài),而不應(yīng)該進(jìn)行異步操作。如果需要進(jìn)行異步操作,應(yīng)該使用actions來(lái)處理。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-417746.html

到了這里,關(guān)于vue全家桶進(jìn)階之路39:Vue3 狀態(tài)管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue全家桶進(jìn)階之路32:Vue3 WatchEffect和watch 監(jiān)聽

    在 Vue 3 中, watchEffect 是一個(gè)用于監(jiān)聽響應(yīng)式數(shù)據(jù)變化的 API。它可以在函數(shù)內(nèi)部自動(dòng)跟蹤數(shù)據(jù)的依賴,并在依賴變化時(shí)重新運(yùn)行函數(shù)。 watchEffect ?的作用以及各個(gè)參數(shù)的功能講解: watchEffect(effect: (onInvalidate: InvalidateCbRegistrator) = void | (() = void) | Promisevoid, options?: WatchEffectOptio

    2023年04月17日
    瀏覽(23)
  • vue全家桶進(jìn)階之路50:Vue3 環(huán)境變量+跨域設(shè)置實(shí)例

    使用.env加后綴的方式來(lái)建立某個(gè)模式下的環(huán)境變量, 例如:項(xiàng)目根目錄新建兩個(gè)環(huán)境變量文件(development開發(fā)環(huán)境和production生產(chǎn)環(huán)境): ?在新建的兩個(gè)環(huán)境變量文件中設(shè)置相同的環(huán)境變量名: 環(huán)境變量名稱必須以\\\"VUE_API_\\\"+名稱的格式,否則不生效,這個(gè)格式是死的。至于

    2023年04月21日
    瀏覽(15)
  • vue全家桶進(jìn)階之路48:Vue3 跨域配置devServer的參數(shù)和設(shè)置

    devServer 是一個(gè)用于配置開發(fā)服務(wù)器的選項(xiàng)對(duì)象。它可以用來(lái)配置服務(wù)器的各種選項(xiàng),例如代理,端口號(hào),HTTPS 等。 以下是一些常用的 devServer 參數(shù)和設(shè)置: port :指定開發(fā)服務(wù)器的端口號(hào),默認(rèn)為 8080 。 host :指定開發(fā)服務(wù)器的主機(jī)名,默認(rèn)為 localhost 。 https :開啟 HTTPS,可

    2023年04月21日
    瀏覽(25)
  • vue全家桶進(jìn)階之路47:Vue3 Axios攔截器封裝成request文件

    可以將Axios攔截器封裝成一個(gè)單獨(dú)的request文件,以便在整個(gè)應(yīng)用程序中重復(fù)使用。 以下是一個(gè)示例,展示如何將Axios攔截器封裝成一個(gè)request文件: 1、創(chuàng)建一個(gè)名為request.js的新文件,并導(dǎo)入Axios: 2、創(chuàng)建一個(gè)名為request的函數(shù),并將其導(dǎo)出: 這將創(chuàng)建一個(gè)名為request的函數(shù),

    2023年04月21日
    瀏覽(95)
  • vue全家桶進(jìn)階之路46:Vue3 Axios攔截器和globalProperties全局設(shè)置

    在Vue.js 3中,使用Axios與Vue.js 2.x中類似,但是需要進(jìn)行一些修改和更新,下面是Vue.js 3中Axios的定義和使用方式: 首先,你需要安裝Axios和Vue.js 3.x,可以使用npm或yarn等包管理工具安裝: 然后,在你的Vue.js 3應(yīng)用程序中,你可以使用以下代碼來(lái)導(dǎo)入和使用Axios: 上面的代碼使用

    2023年04月20日
    瀏覽(21)
  • vue全家桶進(jìn)階之路43:Vue3 Element Plus el-form表單組件

    在 Element Plus 中, el-form 是一個(gè)表單組件,用于創(chuàng)建表單以便用戶填寫和提交數(shù)據(jù)。它提供了許多內(nèi)置的驗(yàn)證規(guī)則和驗(yàn)證方法,使表單驗(yàn)證更加容易。 使用 el-form 組件,您可以將表單控件組織在一起,并對(duì)表單進(jìn)行驗(yàn)證,以確保提交的數(shù)據(jù)符合預(yù)期的格式和要求。該組件具有

    2023年04月20日
    瀏覽(24)
  • vue全家桶進(jìn)階之路31:Vue3 數(shù)據(jù)和方法的雙向綁定ref、reactive、toRefs

    ref 在 Vue 3 中,你可以使用 setup 函數(shù)來(lái)定義組件的數(shù)據(jù)和方法。在 setup 函數(shù)中,你可以使用 ref 、 reactive 和 computed 等 Vue 3 的響應(yīng)式 API 來(lái)定義數(shù)據(jù),并返回一個(gè)包含你需要公開的數(shù)據(jù)和方法的對(duì)象。下面是一個(gè)例子: 在這個(gè)例子中,我們使用 ref 函數(shù)來(lái)定義了一個(gè)名為 mes

    2023年04月19日
    瀏覽(26)
  • 【Vue全家桶】Pinia狀態(tài)管理

    【Vue全家桶】Pinia狀態(tài)管理

    ??這里是前端程序員小張! ??人海茫茫,感謝這一秒你看到這里。希望我的文章對(duì)你的有所幫助! ??愿你在未來(lái)的日子,保持熱愛,奔赴山海! Pinia開始于大概2019年,其目的是設(shè)計(jì)一個(gè)擁有 組合式 API 的 Vue 狀態(tài)管理庫(kù) 目前同時(shí)兼容Vue2、Vue3,也并不要求你使用Compositio

    2023年04月09日
    瀏覽(104)
  • Vue | Vue.js 全家桶 Pinia狀態(tài)管理

    Vue | Vue.js 全家桶 Pinia狀態(tài)管理

    ??? Vue?.js專欄:Node.js Vue.js 全家桶 Pinia狀態(tài)管理 ????? 個(gè)人簡(jiǎn)介:一個(gè)不甘平庸的平凡人?? ? 個(gè)人主頁(yè):CoderHing的個(gè)人主頁(yè) ?? 格言: ?? 路漫漫其修遠(yuǎn)兮,吾將上下而求索?? ?? 你的一鍵三連是我更新的最大動(dòng)力?? 目錄 一、Pinia和Vuex的對(duì)比 什么是Pinia呢? Pina和

    2024年01月16日
    瀏覽(121)
  • electron+vue3全家桶+vite項(xiàng)目搭建【16.1】electron多窗口,pinia狀態(tài)同步,擴(kuò)展store方法,主動(dòng)同步pinia的狀態(tài)【推薦】

    electron+vue3全家桶+vite項(xiàng)目搭建【16.1】electron多窗口,pinia狀態(tài)同步,擴(kuò)展store方法,主動(dòng)同步pinia的狀態(tài)【推薦】

    demo項(xiàng)目地址 我們之前寫了一個(gè)自動(dòng)同步pinia狀態(tài)的插件,可以參考如下文章 electron+vue3全家桶+vite項(xiàng)目搭建【16】electron多窗口,pinia狀態(tài)無(wú)法同步更新問(wèn)題解決 這里面有一個(gè)較大的弊端,就是pinia中的store,只要其中的某個(gè)屬性修改,就會(huì)觸發(fā)這個(gè)store的全量更新,當(dāng)我們有一

    2024年02月11日
    瀏覽(137)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包