天天看點

vue-011. vuex是什麼2. 狀态自管理應用3. 多元件共享狀态的問題4. vuex的核心概念5. 将vuex引到項目中

1. vuex是什麼

github站點: https://github.com/vuejs/vuex
線上文檔: https://vuex.vuejs.org/zh-cn/
簡單來說: 對應用中元件的狀态進行集中式的管理(讀/寫)
           

2. 狀态自管理應用

state: 驅動應用的資料源
view: 以聲明方式将state映射到視圖
actions: 響應在view上的使用者輸入導緻的狀态變化(包含n個更新狀态的方法)           

3. 多元件共享狀态的問題

多個視圖依賴于同一狀态
來自不同視圖的行為需要變更同一狀态
以前的解決辦法
    * 将資料以及操作資料的行為都定義在父元件
    * 将資料以及操作資料的行為傳遞給需要的各個子元件(有可能需要多級傳遞)
vuex就是用來解決這個問題的           

4. vuex的核心概念

1). state

vuex管理的狀态對象
它應該是唯一的
const state = {
    xxx: initValue
}           

2). mutations

包含多個直接更新state的方法(回調函數)的對象
誰來觸發: action中的commit('mutation名稱')
隻能包含同步的代碼, 不能寫異步代碼
const mutations = {
    yyy (state, data) { 
        // 更新state的某個屬性
    }
}           

3). actions

包含多個事件回調函數的對象
通過執行: commit()來觸發mutation的調用, 間接更新state
誰來觸發: 元件中: $store.dispatch('action名稱')  // 'zzz'
可以包含異步代碼(定時器, ajax)
const actions = {
    zzz ({commit, state}, data1) {
        commit('yyy', data2)
    }
}           

4). getters

包含多個計算屬性(get)的對象
誰來讀取: 元件中: $store.getters.xxx
const getters = {
    mmm (state) {
        return ...
    }
}           

5). modules

包含多個module
一個module是一個store的配置對象
與一個元件(包含有共享資料)對應
           

6). 向外暴露store對象

export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters
})
           

7). 元件中:

import {mapGetters, mapActions} from 'vuex'
export default {
    computed: mapGetters(['mmm'])
    methods: mapActions(['zzz'])
}

{{mmm}} @click="zzz(data)"
           

8). 映射store

import store from './store'
new Vue({
    store
})
           

9). store對象

1.所有用vuex管理的元件中都多了一個屬性$store, 它就是一個store對象
2.屬性:
  state: 注冊的state對象
  getters: 注冊的getters對象
3.方法:
  dispatch(actionName, data): 分發action 
           

5. 将vuex引到項目中

1). 下載下傳: npm install vuex --save

2). 使用vuex

1.store.js
    import Vuex from 'vuex'
    export default new Vuex.Store({
        state,
        mutations,
        actions,
        getters,
        modules
    })
2.main.js
    import store from './store.js'
    new Vue({
        store
    })
           

繼續閱讀