Vuex與狀態管理

更新於 發佈於 閱讀時間約 3 分鐘
Vuex 像一個公用容器管理所有資料,作為整個網站全域狀態管理,將狀態集中 Store 管理。

【Why】: 為什麼需要Vuex ?

Vue 用組件溝通方式;都是利用父子元件溝通,透過props 、emit 。
那如果不是父子關係,要如何溝通呢? Vuex 專為 Vue.js 應用程序 狀態管理模式,採集中式存儲管理應用的所有組件狀態.

【What】 : 什麼是Vuex

* Vuex 特性

  1. 資料存在專案裡,隱私好。
  2. 專案全域狀態
  3. 重新整理資料會不見

* Vuex『單向數據流』

  1. 畫面觸發事件(View)
  2. emit (Actions) 修改資料
  3. 包括修改 props所傳遞的資料(State)
  4. 更新畫面 (View)

* Vue 工作流程

1.component 元件 觸發 actions
this.$store.dispatch('Logout',self.userToken);
2.action 透過commit 觸發 mutations
3.mutations 執行邏輯運算,改變store 狀態
4.當store狀態被改變時,觸發Render渲染元件
5.透過Vue.js devtools觀察其變化

* Vuex 架構

1.action → commit → mutation
(非同步)Actions(觸發 mutations)=> 改變資料狀態
(同步)Mutations(修改 states)=> 實際操作狀態
state: {
類似data,管理資料
},
actions:{

負責觸發 mutations,主要處理非同步行為 ex: 打 API
// 登出
Logout({commit}){
commit("CLEAR_USER_DATA");
router.push('/');
}
},
mutations: {

負責修改 store 資料,主要處理同步行為
CLEAR_USER_DATA(){
localStorage.removeItem("Authorization");
}

},

};
2. Vuex提供了分割模組
狀態全部集中到同一個Store,避免變得複雜。
state:{

},
actions:{

},
mutations: {

},
getters:{
store 的計算屬性
取得資料。也可以像 computed 一樣,自定義運算處理資料。
},
modules:{
按專案功能需求,分拆為不同 module。
每個 module 裏都有自己的 state、actions、mutations、getters,也可以設定巢狀 modules。
}

How】 : Vuex 語法

  1. 元件取得Vuex 資料
this.$store
2. 觸發 Vuex actions
this.$store.dispatch('Logout',傳遞資料);
3. mapGetters
一口氣將多筆狀態引入進來。
引入 store 的各種屬性到元件裏使用。
computed: {
...mapGetters({ allTodos: 'getTodos' })
}
等於下面寫法
computed: {
...mapGetters(['getTodos']),
allTodos() {
return this.getTodos;
}
}
avatar-img
2會員
2內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Kate Liu的沙龍 的其他內容
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
你可能也想看
Google News 追蹤
Thumbnail
狀態管理在 Vue 應用中非常重要,尤其是當多個組件需要共享狀態時。每個 Vue 組件管理自己的響應式狀態,但隨著組件數量增加,簡單的管理方式可能變得複雜。這時,可以使用如 Pinia 的狀態管理庫來簡化這一過程。Pinia 提供了一個更簡單的 API 和更強的類型推斷,並由 Vue 核心團隊維護。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖
Thumbnail
狀態管理在 Vue 應用中非常重要,尤其是當多個組件需要共享狀態時。每個 Vue 組件管理自己的響應式狀態,但隨著組件數量增加,簡單的管理方式可能變得複雜。這時,可以使用如 Pinia 的狀態管理庫來簡化這一過程。Pinia 提供了一個更簡單的 API 和更強的類型推斷,並由 Vue 核心團隊維護。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖