iT邦幫忙

2025 iThome 鐵人賽

DAY 20
1

在理解Vuex資料流後,還有幾個重點需要提醒,而在這裡想要介紹的是字串管理及命名空間。在前面介紹的Vuex中,actions與mutations的名稱本質上都屬於字串。如果各個不同的程式碼,如組件、模組物件都直接用硬編碼字串,如:

this.$store.dispatch('fetchEmployees', payload);
commit('setEmployees', data)

可能會有諸多問題,即若其中有一個名稱打字打錯時,不容易被發現,使得編譯錯誤,無法發揮既有功能。此外,當要修改該名稱時,也會顯得維護困難,需針對每個名稱進行修改。此問題尤其在涉及跨檔案管理時,更顯得難於管理,即散落在各檔案的名稱,很難馬上對照到它的定義位置。

因此解決辦法,就是字串管理,也就是將字串統一放在某一個檔案中,統一定義、一同管理。在Vuex中,actions和mutations分別有其對應的字串管理檔案,分別放置於src/store/actions.type.jssrc/store/mutations.type.js

// src/store/actions.type.js
// Employee
export const FETCH_EMPLOYEES = "fetchEmployees";
export const FETCH_EMPLOYEE = "fetchEmployee";
export const CREATE_EMPLOYEE = "createEmployee";
export const UPDATE_EMPLOYEE = "updateEmployee";
export const DELETE_EMPLOYEE = "deleteEmployee";
// src/store/mutations.type.js
export const SET_LOADING = "SET_LOADING";

// Employee
export const SET_EMPLOYEES = "setEmployees";
export const SET_EMPLOYEE_COUNT = "setEmployeeCount";

export const SET_NEXT_URL = "setNextUrl";
export const SET_PREV_URL = "setPrevUrl";
export const SET_CURRENT_PAGE = "setCurrentPage";

也因為將所有會用到的actions及mutations都放在同一個檔案,因此只要針對檔案中,各字串的內容進行修改,即可同步修改有使用到該字串名稱的檔案,管理上變得相當方便。且各字串名稱的定義內容,也可以一目瞭然地從這個檔案中找尋到。

未來在使用呼叫時,只要參考以下程式碼的語法,即可順利完成呼叫。

// 呼叫actions
import { FETCH_EMPLOYEES } from "@/store/actions.type";

this.$store.dispatch(`employee/${FETCH_EMPLOYEES}`, {
        page: this.currentPage,
        page_size: this.pageSize
});

// 呼叫mutations
import { SET_EMPLOYEES } from "@/store/mutations.type";

this.$store.commit(`employee/${SET_CURRENT_PAGE}`, newPage);

此外,可以注意到前面Vuex模組在匯出全域環境前,有設定namespaced: true,此即所謂的命名空間(namespace)。

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

代表在呼叫或抓取更新狀態時,需要加上employee/前綴,如:

  • action:this.$store.dispatch('employee/FETCH_EMPLOYEES', ...)
  • mutation:this.$store.commit('employee/SET_LOADING', ...)
  • getter:mapGetters('employee', [...])

如此才抓得到正確已更新的狀態,並可以避免不同模組可能使用相同名稱的狀態,而導致名稱衝突。這在開發後期,增加越來越多功能的情況下,越能顯現其必要性,因此建議在一開始就建立設定命名空間的習慣,除了方便管理,也可以減少需要除錯的空間。


上一篇
Day 19: Vue資料流與狀態管理-Vuex模組物件
系列文
從零打造網頁系統:非資訊人也能完成的全端專題實作20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言