在 Vue 2.5 使用 Vuex 狀態管理套件

模組

src/store/modules 資料夾新增 record.js 模組。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import axios from 'axios';

export default {
namespaced: true,
state: {
//
},
mutations: {
//
},
actions: {
//
},
};

src/store/ 資料夾的 index.js 檔引入模組。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import Vue from 'vue';
import Vuex from 'vuex';
import record from './modules/record';

Vue.use(Vuex);

export default new Vuex.Store({
namespaced: true,
modules: {
record,
},
state: {
loading: false,
},
mutations: {
//
},
actions: {
//
},
});

命名空間

在元件分發模組的動作,在 dispatch() 的第一個參數引入命名空間。

1
2
3
4
5
6
7
8
9
10
11
12
export default {
methods: {
fetchRecords() {
this.$store.dispatch('record/fetchRecords', {
url: '/users/me/records',
})
.then(({ data }) => {
//
});
},
},
};

在元件分發根目錄模組的動作,在 dispatch() 的第三個參數引入如下物件。

1
2
3
4
5
6
7
export default {
methods: {
setLoading() {
context.dispatch('setLoading', false, { root: true });
},
},
};

其他

使用輔助函數,在元件獲取多個倉庫(store)狀態。

1
2
3
4
5
6
7
8
9
import { mapState } from 'vuex';

export default {
computed: {
...mapState([
'loading',
]),
},
};

參考資料