Vuex 管理狀態(資料)

2021-10-24 23:11:58 字數 3722 閱讀 8295

這個狀態自管理應用包含以下幾個部分:

以下是乙個表示「單向資料流」理念的簡單示意:

但是,當我們的應用遇到多個元件共享狀態時,單向資料流的簡潔性很容易被破壞:

state用來儲存模組中使用的資料

mutations是用來儲存操作state中的資料的方法

action是用來儲存非同步的方法

vuex中修改state 只能是mutations action 不是直接修改狀態 而是提交 mutation mutation去修改state

特點: vuex規定 mutation不要包含非同步請求,action可以包含

我們來簡單寫乙個數字加減的方法

vue專案中的列表如下,在./src/store/index.js中操作vuex的狀態,其中的**如下

import vue from 'vue'

import vuex from 'vuex'

vue.use(vuex)

// 輸出vuex的資料

export default new vuex.store(,

mutations: ,

reducenum (state, num)

},actions: , n) , 2000)}},

modules:

})

在./src/main.js中接受vuex的資料後,我們就可以在元件呼叫期中的資料

import vue from 'vue'

import router from './router'

// 接受vuex的資料

import store from './store'

vue.config.productiontip = false

new vue(}

減少

這樣我們就可以實現對state中資料num的增加和減少以及非同步增加的功能

mapstate 簡化 元件中 獲取state步驟

mapmutations 簡化元件中 提交mutation的操作

mapactions 簡化元件中 觸發action的操作

import  from 'vuex

, computed:

}使用狀態

}提交mutation

this.addnum(引數)

提交action

this.addnumasync(引數)

getters

相當於 vuex中的 計算屬性 使用場景:某個 狀態 需要 依賴另乙個狀態 存在,當這個狀態 改變時,getter會重新計算

store = ,

getters:

}}在元件中如何獲取

1,this.$store.getters.numdouble

2,通過助手函式

import from 'vuex'

computed:

注意:

不要直接修改getter的值 ,vuex也沒有提供修改getter的方法,應該去修改依賴 state中的資料

module

預設store是單一狀態樹,應用的所有狀態會集中到乙個比較大的物件。當應用變得非常複雜時,store 物件就有可能變得相當臃腫。

const modulea = ),

mutations: ,

actions: ,

getters:

}const moduleb = ),

mutations: ,

actions:

}const store = new vuex.store(

})

如何在元件中使用

獲取this.$store.state.模組.num

如何提交mutations 或者action

1,this.$store.commit('addnum')

this.$store.dispatch('addnumasync')

注意: mutations和actions預設提交 沒有模組化,會導致

所以的模組中 同名mutation或者action同時觸發

?如何解決這個問題

你可以通過新增 namespaced: true 的方式使其成為帶命名空間的模組。當模組被註冊後,它的所有 getter、action 及 mutation 都會自動根據模組註冊的路徑調整命名

const modulea = ),

mutations: ,

actions: ,

getters:

}const store = new vuex.store(

})提交

this.$store.commit('a/addnum')

如果助手函式

methods:

可以通過

this['a/addnum'](params)

methods:

this.addnum() 提交a模組中的addnum

我們也可以將本來都寫在index中的資料分離

index.js寫成

import vue from 'vue'

import vuex from 'vuex'

import state from './state'

import mutations from './mutations'

import actions from './actions'

import getters from './getters'

import modulea from './modulea'

vue.use(vuex) // vue原型中會加入乙個例項物件 $store

// 初始化store

const store = new vuex.store(

})export default store

將原本解除安裝index的資料單獨寫乙個js檔案

state.js

export default
mutation.js

export default ,

reducenum (state, num)

}

action.js

export default , n) , 2000)

}}

getter.js

export default  

}

狀態管理庫vuex 狀態管理庫vuex

vuex是乙個專為vue.js應用程式開發的管理庫。狀態就是指元件之間共享的資料 vue專案中配置狀態管理庫vuex的流程 2建立狀態管理庫物件store 3對外丟擲store物件 4在mian.js中將store物件與當前專案相關聯 vuex是乙個專為vue.js應用程式開發的管理庫。狀態就是指元...

vuex狀態管理

在 vue.js 的專案中,如果專案結構簡單,父子元件之間的資料傳遞可以使用 props 或者 emit 等方式 但是如果是大型專案,很多時候都需要在子元件之間傳遞資料,使用之前的方式就不太方便。vue 的狀態管理工具 vuex 完美的解決了這個問題。一 安裝並引入 vuex 專案結構 首先使用 n...

vuex 狀態管理

1.乙個const 物件用來管理系統中的變數。在元件中,當乙個元件需要獲取多個狀態時候,將這些狀態都宣告為計算屬性會有些重複和冗餘。為了解決這個問題,我們可以使用mapstate輔助函式幫助我們生成計算屬性。當對映的計算屬性的名稱與 state 的子節點名稱相同時,我們也可以給mapstate傳乙個...