Fiddle: hereKann ich von Getter in Vuex do Versand
Ich bin ein Webapp mit Vue 2 mit Vuex zu schaffen. Ich habe einen Speicher, in dem ich Zustandsdaten von einem Getter abholen möchte. Was ich will, ist, wenn Getter herausfindet, dass Daten noch nicht aufgefüllt sind, ruft er ab und holt die Daten.
Es folgt mein Vuex Speicher:
const state = {
pets: []
};
const mutations = {
SET_PETS (state, response) {
state.pets = response;
}
};
const actions = {
FETCH_PETS: (state) => {
setTimeout(function() {
state.commit('SET_PETS', ['t7m12qbvb/apple_9', '6pat9znxz/1448127928_kiwi'])
}, 1000)
}
}
const getters = {
pets(state){
if(!state.pets.length){
state.dispatch("FETCH_PETS")
}
return state.pets
}
}
const store = new Vuex.Store({
state,
mutations,
actions,
getters
});
Aber ich bin immer folgende Fehlermeldung:
Uncaught TypeError: state.dispatch is not a function(…)
Ich weiß, dass ich das tun kann, von beforeMount
von Vue Komponente, aber ich habe mehrere Komponenten, die benutzt denselben Vuex-Speicher, also muss ich es in einer der Komponenten machen, welche sollte das sein und wie wird es sich auf andere Komponenten auswirken.
Dank für die Antwort, zwei Dinge entfernen: 1. Wenn Es gibt mehrere Komponenten, die die Haustiere benutzen, in welchen Komponenten sie geholt werden sollte. Was kann ein zentraler Ort sein, um dies zu tun? 2. In ähnlicher Weise kann dies nicht auch von berechnet werden? – Saurabh
1. vuex ist Ihr zentraler Speicher, so dass alle über eine berechnete Eigenschaft darauf zugreifen können, z. B. 'compressed: {pets() {return this. $ Store.state.pets}}' Übergeben des Speichers in den Stamm Ihrer App ermöglicht dies. 2. Sie könnten die mounted-Methode Ihres Apps-root verwenden, aber ich würde keine berechnete Eigenschaft verwenden, um asynchrone Updates für vuex zu erstellen. Stattdessen können sie nur den Speicher überwachen (wie oben) und aktualisiert werden, wenn der asynchrone Vorgang abgeschlossen ist und der Commit den Status seiner neuen Pet-Daten übergeben hat. – GuyC
, um Punkt 1 zu klären. Ich würde die Async-Vuex-Dispatch() innerhalb Ihrer Apps-Root oder einer Komponente auslösen, die logisch aufgerufen wird, wenn das Tierobjekt zuerst benötigt wird. Ohne die App-Struktur zu sehen, die schwer zu lokalisieren ist, aber ich bin mir sicher, dass Sie einen Ort finden, der Sinn ergibt. – GuyC