Vuex 是 Vue 的一个状态管理模组,介于后端 fetch 与前端 render 的中间,方便先对后端取回的数据进行初步的整理。由于 Vuex 的写法、用法因人而异而且差异会很大,所以特此说明本前端使用 Vuex Module 的方式
src/
├── services/
│ └── notion.service.js
└── store/
├── index.js
├── notion.module.js
└── wallet.module.js
本 repository 以两个资料夹 services 与 store 分别管理 vuex module
本 Repository 采用比较进阶的写法,透过宣告并 export 大写的保留字来操作 vuex 的 Getters, Setters 与 Actions
// import service 与 data, config 使用
import NotionService from '@/services/notion.service';
import notionDB from '@/data/notiondb';
// Action, Setters, Getter 大写字依序宣告
// Actions
export const FETCH_NOTION_DATA = 'fetchNotionData'; <<<<<<<<<<<<<< 这里
// Setters
export const SET_NOTION_DATA = 'setNotionData'; <<<<<<<<<<<<<<<<<< 这里
// Getters
export const GET_NOTION_DATA = 'getNotionData'; <<<<<<<<<<<<<<<<<< 这里
// State 设定
const state = {
...
};
// Getter 设定
const getters = {
[GET_NOTION_DATA](state) { <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 这里
....
},
};
// Action 设定
const actions = {
[FETCH_NOTION_DATA](context, name) { <<<<<<<<<<<<<<<<<<<<<<<<< 这里
...
}
};
// Mutation 设定
const mutations = {
[SET_NOTION_DATA](state, notionData) { <<<<<<<<<<<<<<<<<<<<<<< 这里
...
},
};
export default {
state,
actions,
mutations,
getters,
};
getters, mutations 都是依照一般的使用方式,关于 Action 可以透过大写字来以 dispatch 呼叫:
// AppHeader.vue
// import 大写字
import { mapGetters, mapActions } from "vuex";
import {
...
CONNECT_WALLET, <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 这里
} from "@/store/wallet.module";
// 透过 dispatch 使用
setWallet(data) {
this.isConnecting = false;
this.$store.dispatch(CONNECT_WALLET, data); <<<<<<<<<<<<<<<<<< 这里
},
...
// 透过 mapActions 注册
computed: {
...mapGetters([...]),
...mapActions([CONNECT_WALLET]),
},