計算されたゲッターが更新される前の状態にアクセスして古い状態をレンダリングする問題があります。私はすでにアクションと突然変異をマージし、状態をさまざまな値に変更するなどのいくつかの試みを試みましたが、ディスパッチが完了する前にゲッターが呼び出されています。非同期アクション(API呼び出し)が完了する前にVuexにアクセスする前に非同期アクションが完了しました
問題
状態がアクセスされます。
コード構造
- コンポーネントAの負荷のAPIデータ。
- ユーザーが1つのデータをクリックします。
- コンポーネントAは、クリックされたデータ(オブジェクト)をコンポーネントBにディスパッチします。
- コンポーネントBが受け取ったオブジェクトをロードします。
注
DOMはうまくレンダリングします。これはコンソールエラーです。 Vueは常にDOMの変更を監視し、即座に再レンダリングします。しかし、コンソールはすべてをピックアップします。 (成分のみの後に呼び出される)
目標
防止成分B、成分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はので、どのように私はこのコンソールのエラーを防ぐことができ、すべての状態が監視や管理についてですか?
ありがとうございます。