Vuex與狀態管理

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

【Why】: 為什麼需要Vuex ?

Vue 用組件溝通方式;都是利用父子元件溝通,透過props 、emit 。

那如果不是父子關係,要如何溝通呢? Vuex 專為 Vue.js 應用程序 狀態管理模式,採集中式存儲管理應用的所有組件狀態.

【What】 : 什麼是Vuex

* Vuex 特性

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

* Vuex『單向數據流』

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

* Vue 工作流程

raw-image

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
留言分享你的想法!
avatar-img
Kate Liu的沙龍
2會員
2內容數
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
如果前人已經走出一條最佳路徑,我們只顧著欣賞也會到山頂 關注點的改變 一個好的架構都會希望讓開發者能專注在”業務邏輯”的實現,可以提高專案的開發效率、減少開發者非關業務邏輯的事情而煩惱。例如: 開發者A: 請問元件的對話窗如何在確認時控制關閉或開啟狀態? 這個實際案例是架構師認為對話窗的動作
Thumbnail
如果前人已經走出一條最佳路徑,我們只顧著欣賞也會到山頂 關注點的改變 一個好的架構都會希望讓開發者能專注在”業務邏輯”的實現,可以提高專案的開發效率、減少開發者非關業務邏輯的事情而煩惱。例如: 開發者A: 請問元件的對話窗如何在確認時控制關閉或開啟狀態? 這個實際案例是架構師認為對話窗的動作
Thumbnail
Vue3 筆記,指令進階篇
Thumbnail
Vue3 筆記,指令進階篇
Thumbnail
Vue3 學習筆記,元件與資料傳遞篇
Thumbnail
Vue3 學習筆記,元件與資料傳遞篇
Thumbnail
前言 Vue 是一個現代開發框架,擁有完尚的生態系,讓我們可以將須多元件客製化,做出組件,並且可重複利用,高擴充性。在開發組件時,每個組件都擁有自己的生命周期,Vue 組件會偵測每個變數值,是否有變,並且更新內容,今天要一個一個了解 Vue 的生命週期,讓大家有更多認識。 Vue 的生命週期
Thumbnail
前言 Vue 是一個現代開發框架,擁有完尚的生態系,讓我們可以將須多元件客製化,做出組件,並且可重複利用,高擴充性。在開發組件時,每個組件都擁有自己的生命周期,Vue 組件會偵測每個變數值,是否有變,並且更新內容,今天要一個一個了解 Vue 的生命週期,讓大家有更多認識。 Vue 的生命週期
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
狀態管理有點像是 cookie 或 localStorage,可是又多了更多操作可以用,讓你再切換頁面時可以使用相同的變數。 用來使用這個功能的套件叫做 vuex 以下不是狀態管理全部的功能,但是最常在用的其實就是這些 state 首先先來定義一個可以在各個網頁頁面取用的變數吧 所有的狀態管理設定
Thumbnail
狀態管理有點像是 cookie 或 localStorage,可是又多了更多操作可以用,讓你再切換頁面時可以使用相同的變數。 用來使用這個功能的套件叫做 vuex 以下不是狀態管理全部的功能,但是最常在用的其實就是這些 state 首先先來定義一個可以在各個網頁頁面取用的變數吧 所有的狀態管理設定
Thumbnail
專案建好了,那先來講 Vue 的專案架構 詳細內容很多,所以我挑重點講 public index.html public/index.html 是 Vue 頁面的 entry point,進入一個 Vue 頁面會先進 public/index.html,再套用 App.vue,最後才是進入你寫的 .
Thumbnail
專案建好了,那先來講 Vue 的專案架構 詳細內容很多,所以我挑重點講 public index.html public/index.html 是 Vue 頁面的 entry point,進入一個 Vue 頁面會先進 public/index.html,再套用 App.vue,最後才是進入你寫的 .
Thumbnail
續上篇,那是Vue 2 Options API的舊寫法,這邊改成用Vue 3 Composition API的寫法: Vue2: Vue3 setup() / ref / reactive Composition API可以直接在setup()裡面定義data跟method,簡潔許多。 props
Thumbnail
續上篇,那是Vue 2 Options API的舊寫法,這邊改成用Vue 3 Composition API的寫法: Vue2: Vue3 setup() / ref / reactive Composition API可以直接在setup()裡面定義data跟method,簡潔許多。 props
Thumbnail
data() method 續上篇,這邊修改一下HomeView.vue的code。 Before: After: 在頁面最下方顯示 name: Vic,data method直接回傳name變數,在<template>中可以直接用{{ name }}將變數顯示出來。 結果如下: v-model
Thumbnail
data() method 續上篇,這邊修改一下HomeView.vue的code。 Before: After: 在頁面最下方顯示 name: Vic,data method直接回傳name變數,在<template>中可以直接用{{ name }}將變數顯示出來。 結果如下: v-model
Thumbnail
S1.建立資料庫 user S2.建立 index.htm a.載入 vue.js、jquery、bootstrap b.版面建立 S3.vue.js程式 新增、查看列表、互動視窗、修改、刪除 index.htm VueControl.js 原碼:https://reurl.cc/e3k8yL
Thumbnail
S1.建立資料庫 user S2.建立 index.htm a.載入 vue.js、jquery、bootstrap b.版面建立 S3.vue.js程式 新增、查看列表、互動視窗、修改、刪除 index.htm VueControl.js 原碼:https://reurl.cc/e3k8yL
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News