Vuex 主要的核心概念
- state:存放所有共享資料的地方。
- actions:處理非同步。
- mutations:用於變更 store 的資料數據,還能集中監控所有數據的變化。
- getter:只進行包裝數據。
元件方法 | Vuex |
---|---|
data | state |
methods | action |
computed | getter |
mutation(改變資料的方法) |
- state,驅動應用的數據源;
- view,以聲明方式將 state 映射到視圖;
- actions,響應在 view 上的用戶輸入導致的狀態變化。
元件使用 state 資料的方式
1.
this.$store.state.資料名稱
2.
1 | import { mapState } from 'vuex' |
在 Vuex 當中,不允許在元件直接修改 Vuex 的數據,這樣不易於之後的維護。
要用 mutations 來傳遞。
1 | // 錯誤示範 |
調用 mutations
觸發 mutations :commit
調用 mutations 有以下方式:
1.
this.$store.commit('mutations 函式')
commit 的作用就是調用某個 mutations 函式
2.
1 | import { mapMtations } from 'vuex' |
不要在 mutations 函式當中執行非同步。
如果要執行非同步,要用 action 來處理。
1 | // 錯誤示範 |
actions 處理非同步
觸發 actions :dispatch
actions 只負責執行非同步操作,但在 actions 當中,不可以直接修改去 state 的數據。
必須透過 context.commit 來觸發 mutations 的函式。
使用 actions 方式:
1.this.$store.dispatch('addAsync 函式')
2.
1 | import { mapActions } from 'vuex' |
getter
觸發 getters :getters
getter 用於對 store 中的數據進行加工處理形成新數據。getter 只進行包裝數據,並不會修改到 store 中的數據。如果 store 中的數據發生變化,那麼 getter 包裝出來的新數據也會出現變化。
使用 getters 的方式:
1.this.$store.getters.getter名稱
2.
1 | import { mapGetters } from 'vuex' |