vuex

vuex是為vue.js應(yīng)用程序開發(fā)的 狀態(tài)管理模式,它集中的儲存所有的組件狀態(tài),并以一定的規(guī)則去改變狀態(tài) 。

它解決的問題:

? ? ? ? 1.多個組件依賴于一個狀態(tài)時,對于多層組件的傳參非常的繁瑣,并且對于同級之間的狀態(tài)的傳遞未能為力。

? ? ? ? 2.來自不同的行為需要變更同意狀態(tài),以往采用父子組件直接引用或通過事件來變更和同步狀態(tài)的多層拷貝,會導(dǎo)致無法維護的代碼。

Vuex有5個核心屬性:State? Getter? ?Mutation? ?Action? ?Module

state -- 是單一的狀態(tài)樹,可以在state中定義我們需要的對象,數(shù)組,字符串等等。用于管理數(shù)據(jù),管理的數(shù)據(jù)是響應(yīng)式的,當(dāng)數(shù)據(jù)改變時驅(qū)動視圖更新。.

getter -- 跟vue的計算屬性相似,當(dāng)我們store的state屬性中衍生出一些狀態(tài),那么我就需要getter,getter會接收state為第一個參數(shù),而且getter的返回值會根據(jù)他的依賴被緩存起來,只有在getter中的依賴值(state中的某個需要派生的值)發(fā)生改變時才會重新計算。

mutations -- 更改store中state的狀態(tài),每個mutation都有一個字符串類型的事件類型和一個回調(diào)函數(shù),如果要改變state的狀態(tài)就要在回調(diào)函數(shù)中改變。執(zhí)行這個函數(shù)我們要執(zhí)行一個相應(yīng)的調(diào)用方法。store.commit。更新數(shù)據(jù),state中的數(shù)據(jù)只能使用mutations去改變數(shù)據(jù),Mutation 必須是同步函數(shù).

actions -- actions可以提交mutations,在actions中可以執(zhí)行store.commit,在actions中可以進行異步操作。在頁面中使用actions,要用到store.dispatch。響應(yīng)數(shù)據(jù)響應(yīng)成功后交給mutations。

modules -- 其實就是解決了當(dāng)state中很復(fù)雜臃腫的時候,module可以將store分割成模塊,每個模塊中擁有自己的state,mutations,actions和getter。


vue 項目中的配置

在vue的src中添加store文件夾并且設(shè)置名為index.js的js文件,在js文件中如下操作

2.在main.js文件中導(dǎo)入vuex實例? import?store?from?'./store' --并且放入到new Vue中store方便全局調(diào)用

3.在組件中標(biāo)簽使用$store.state.num可以導(dǎo)入vuex中的狀態(tài)(數(shù)據(jù))

4.也可以在組件computed中導(dǎo)入

?????????num?()?{

??????????????return?this.$store.state.num? // $store.state調(diào)用state中的數(shù)據(jù)

????????????}

5.導(dǎo)入import?{?mapState?}?from?'vue'? 在computed通過 ...mapState([ 'mapState' ])導(dǎo)出state中的數(shù)據(jù)

如果組件自己有計算屬性,state的字段映射成計算屬性


mutations 定義修改數(shù)據(jù)的函數(shù)

參數(shù)state當(dāng)前申明的state選項中的數(shù)據(jù),params 接受數(shù)據(jù) , payload 載荷(運送數(shù)據(jù))建議對象{}形式

mutations: {

mm?(state?,?payload)?{

??????return?state.num?=?state.num?+?payload.num

????}

}

組件調(diào)用

methods:{

clicks?()?{

??????this.$store.commit('mm',{?num:20?})? // $store.commit調(diào)用mutations 中的方法

????}

}

效果前


效果后


mapMutations

把vuex中的mutations的函數(shù)映射到組件的methods中

通俗:通過mapMutations函數(shù)可以生成methods中函數(shù)

import { mapMutations } from 'vuex'

?methods:?{

????...mapMutations(['mm']),

????clicks?()?{

??????this.mm({num:?20})

????}

??}

actions

// 異步獲取數(shù)據(jù)

? actions: {

? ? // actions 中的函數(shù)有默認(rèn)傳參 context

? ? // context :執(zhí)行上下文 執(zhí)行環(huán)境? ----- 函數(shù)能夠使用到的對象(vuex實例===this.$store)

? ? getData ({commit}, num) {

? ? ? // 模擬異步的獲取數(shù)據(jù)

? ? ? window.setTimeout(()=>{

? ? ? ? const data = num

? ? ? ? // 通過commit提交數(shù)據(jù)給mutations修改數(shù)據(jù)

? ? ? ? commit('mm', data)

? ? ? },2000)

? ? ? // Promise形式

? ? ? // return new Promise((r) => {

? ? ? //? setTimeout(() => {

? ? ? //? ? commit('mm', num);

? ? ? //? ? r()

? ? ? //? }, 2000)

? ? ? // })

? ? }

? }

組件中調(diào)用

clicks1?()?{

??????this.$store.dispatch('getData',?{num:?50})? //? this.$store.dispatch用于調(diào)用actions中的異步方法

}

效果


注意:action 提交的是 mutation,而不是直接變更狀態(tài)。action 可以包含任意異步操作。

mapActions

mapActions輔助函數(shù),把actions中的函數(shù)映射組件methods中

通俗:通過mapActions函數(shù)可以生成methods中函數(shù)

import { mapActions } from 'vuex'

...mapActions(['getDat'])

?clicks1?()?{

??????this.getDat({num:?50})

????}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Vuex 的學(xué)習(xí)記錄 資料參考網(wǎng)址Vuex中文官網(wǎng)Vuex項目結(jié)構(gòu)示例 -- 購物車Vuex 通俗版教程Nuxt....
    流云012閱讀 1,554評論 0 7
  • Vuex 是什么? ** 官方解釋:Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式**。它采用集中...
    Rz______閱讀 2,361評論 1 10
  • 2019-10-22 配置 vuex 和 vuex 本地持久化 目錄 vuex是什么 vuex 的五個核心概念St...
    欣簡書閱讀 2,639評論 0 8
  • Vuex是什么? VueX 是一個專門為 Vue.js 應(yīng)用設(shè)計的狀態(tài)管理架構(gòu),統(tǒng)一管理和維護各個vue組件的可變...
    她說東京很熱閱讀 3,864評論 0 0
  • 學(xué)習(xí)目的 了解和熟練使用 VueX,能夠在實際項目中運用。 VueX介紹 Vuex 是一個專為 Vue.js ...
    _1633_閱讀 2,872評論 0 7

友情鏈接更多精彩內(nèi)容