ich Probleme mit bin, wo ein berechneter Getter den Zustand greift, bevor es aktualisiert wird, also einen alten Zustand zu machen. Ich habe bereits einige Dinge ausprobiert, zum Beispiel das Zusammenführen von Mutationen mit Aktionen und das Ändern des Status in viele verschiedene Werte, aber der Getter wird immer noch aufgerufen, bevor der Versand beendet ist.Vuex Zugriff Zustand vor async Aktion abgeschlossen ist
Problem
Staat vor Asynchron-Aktion (api-Aufruf) zugegriffen abgeschlossen ist.
-Code-Struktur
- Komponente A Lasten API-Daten.
- Der Benutzer klickt auf 1 der Daten.
- Komponente A sendet geklickte Daten (Objekt) an Komponente B.
- Komponente B lädt Objekt empfangen.
Hinweis
Das DOM macht in Ordnung. Dies ist ein Konsolenfehler. Vue schaut sich immer nach DOM-Änderungen um und gibt sie sofort wieder. Die Konsole nimmt jedoch alles auf.
Tor
Prevent Komponente B (die erst nach Komponente genannt wird) aus seiner berechneten Getter-Methode ausgeführt wird vor dem Versand der Komponente A abgeschlossen ist.
Store.js
import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios';
Vue.use(Vuex);
export const store = new Vuex.Store({
state: {
searchResult: {},
selected: null,
},
getters: {
searchResult: state => {
return state.searchResult;
},
selected: state => {
return state.selected;
},
},
mutations:{
search: (state, payload) => {
state.searchResult = payload;
},
selected: (state, payload) => {
state.selected = payload;
},
},
actions: {
search: ({commit}) => {
axios.get('http://api.tvmaze.com/search/shows?q=batman')
.then(response => {
commit('search', response.data);
}, error => {
console.log(error);
});
},
selected: ({commit}, payload) => {
commit('selected', payload);
},
},
});
SearchResult.vue
<template>
<div>
//looped
<router-link to="ShowDetails" @click.native="selected(Object)">
<p>{{Object}}</p>
</router-link>
</div>
</template>
<script>
export default {
methods: {
selected(show){
this.$store.dispatch('selected', show);
},
},
}
</script>
ShowDetails.vue
<template>
<div>
<p>{{Object.name}}</p>
<p>{{Object.genres}}</p>
</div>
</template>
<script>
export default {
computed:{
show(){
return this.$store.getters.selected;
},
},
}
</script>
Frage
Vuex alles über Zustand beobachtet und das Management so wie kann ich verhindern, dass diese Konsole Fehler?
Vielen Dank im Voraus.