10.
Vuex 資料傳遞
- Vuex就是把資料拉出來,統一在外部存取,不需用props或emmits傳來傳去。
- 啟用Vuex後會多一個
\src\store\資料夾,其中index.js可以定義各種資料的存取
import { createStore } from "vuex";
export default createStore({
state:{
isOpen: false,
},
actions:{
handOpenState(context) {
const isOpen = !context.state.isOpen;
context.commit("OpenState", isOpen);
},
},
mutations:{
OpenState(state, payload) {
state.isOpen = payload;
},
},
getters(
isOpen(state) {
return state.isOpen;
},
),
modules: {},
});
state:{} 用來設定初始變數
actions:{} 用來設定讓組件用 dispatch() 呼叫的函數
- 函式可以傳入
context 參數(用context.state 就可取得 state 中的變數值),也可以有第二個參數,也就是外部傳進來的值
- 用
context.commit 觸發 muations 中的函式以改變資料值
muations:{} 用來改變 state 中資料值
- 函式一般會傳入
state ,用來取得 state 中的變數值及第二個參數,也就是 actions 傳進來的值
- 元件可以直接用 store.commit() 來執行
muations 中的函式(但不是好的作法)
getters:{} 用來重組資料(類似computed),函式一般會傳入 state ,用來取得 state 中的變數值
- 從 Vuex 取出
useStore() 函式,用 store.state.isOpen 便可取到定義在state中的變數,但建議改用store.getters.isOpen(或store.getters['isOpen'])
const isOpen = computed(() => {
//return store.getters.isOpen;
return store.getters["isOpen"];
});
- 用
store.dispatch() 觸發 actions 中的函式(盡量不要用store.commit() 觸發 muations 中的函式直接來改值,這樣流程不一致不太好)
<script>
import { useStore } from "vuex";
export default {
setup() {
const store = useStore();
const handClickMenu = () => {
store.dispatch("handOpenState");
};
return { handClickMenu };
},
};
</script>
-