Существует правильный способ делать то, что вы хотите, но это не так, как вы это делаете.Vue довольно строг в отношении «Не изменяйте состояние хранилища vuex вне обработчиков мутаций».
Это означает, что вы должны изменять состояние хранилища только посредством мутации, а затем использовать ваш метод получения только для получения данных.Вы также должны использовать действие для фиксации мутации.Поэтому для того, что вы пытаетесь сделать, вы должны попробовать это следующим образом.
// AnyPage.vue
<template>
<div>{{myData}}</div>
</template>
<script>
export default {
data() {
return {
myData:null
}
},
async created(){
if(this.$store.state._myData === null) {
await this.$store.dispatch('getData')
}
this.myData = this.$store.getters.myData;
}
}
</script>
, затем в вашем магазине:
// store.js
export default new Vuex.Store({
state: {
_myData: null,
},
getters: {
myData: (state) => state._myData,
}
mutations: {
SET_DATA(state, data) {
state._myData = data
}
}
actions: {
getData({ context }){
axios.get('http://myData.com/')
.then(res => {
context.commit('SET_DATA', res)
})
}
}
}
});
Вы должны прочитать в документах который охватывает все это очень хорошо.