在Vuex商店突變中,是否可以訪問getter?考慮下面的例子。在Vuex突變內訪問getter
new Vuex.Store({
state: {
question: 'Is it possible to access getters within a Vuex mutation?'
},
mutations: {
askQuestion(state) {
// TODO: Get question from getter here
let question = '';
if (question) {
// ...
}
}
},
getters: {
getQuestion: (state) => {
return state.question;
}
}
});
當然的例子並沒有太大的意義,因爲我可以直接訪問突變內state
對象的question
財產,但我希望你明白我要做的。也就是說,有條件地操縱狀態。
在突變範圍內,this
爲undefined
,state
參數允許訪問state
對象,而不是存儲的其餘部分。
The documentation on mutations沒有提到這樣做的任何事情。
我的猜測是,這是不可能的,除非我錯過了什麼?我猜想另一種方法是在商店之外執行這種邏輯(導致代碼重複)或者實現一個這樣做的動作,因爲動作可以訪問整個商店環境。我非常確定這是一個更好的方法,那就是讓突變專注於實際應該做的事情;改變狀態。這可能是我最終會做的事情,但我只是好奇,如果在突變中訪問getter甚至有可能?
你能也許爲什麼你需要在突變干將詳細點嗎?你說得對,你的例子很容易引用'state.question'。而且,是的,任何基於當前狀態將採取不同*動作*的邏輯都應該在動作中處理。 – thanksd
您可以在操作中訪問getter,因爲操作會將上下文作爲第一個參數。像這樣:actions:{action1:(context,payload)=> {console.log(context.getters.getSomething); }}。不確定你是否可以在突變中做到這一點,因爲突變只能獲得當地的「狀態」。 – wostex
@thanksd因爲我的真實代碼比這個更復雜,我需要檢查一些東西。具體的例子是將產品添加到購物車,並且我想檢查它是否已經存在。我想保留這個邏輯來保持它的清潔。我很確定最好的方法是使用一個動作,但只是好奇,是否有可能在任何原因下訪問突變中的獲取者。 – Andy0708