我遇到问题,计算得到的getter在更新之前访问状态,从而呈现旧状态。我已经尝试了一些东西,比如将突变与动作合并,并将状态更改为许多不同的值,但是在调度完成之前仍然调用getter。Vuex访问状态BEFORE异步操作完成
问题
国家是异步操作(API调用)访问之前完成。
代码结构
- 组分A负载API数据。
- 用户点击1个数据。
- 组件A将点击数据(对象)发送给组件B.
- 组件B加载收到的对象。
注意
的DOM渲染罚款。这是一个CONSOLE错误。 Vue一直在观察DOM更改并立即重新渲染。然而控制台拿起一切。
目标
防止组分B从运行其计算getter方法之前组分A的调度完成时(其仅称为组件之后)。
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>
问题
Vuex是所有关于状态观察和管理,我怎么能防止这种控制台错误?
在此先感谢。