如何在将操作发送到 Vuex 后将数据传递给组件?
How to pass data to component after action dispatched to Vuex?
我正在使用 Vuex 来尝试管理应用程序级数据。我使用 axios 获取数据,然后将该数据传播到组件中的数据变量。没什么复杂的。
我的店铺是这样的
// store.js
// appropriate imports and such
export const store = new Vuex.Store({
state: {
var: []
},
actions:{
getData(context){
axios.get('/endpoint').then(function(response){
context.state.var = res.data.value1;
console.log("action in store.js run");
//appropriate brackets,etc below
然后我在 app.js
中发送这个动作
//appropriate imports and such above
const app = new Vue({
el: '#app',
store: store,
created() {
this.$store.dispatch('getRightSidebar')
console.log("action dispatched")
}
});
我使用创建的生命周期挂钩 来确保在安装组件之前分派此操作。当然,此时应该将 两条 消息记录到控制台。一条消息来自创建的生活方式挂钩,另一条消息来自正在调度的实际操作。但是,当我 运行 应用程序时,只记录前一条消息。当然,当行动被派遣时,实际的 method/request 我是 called/executed.
现在,当我从组件的已安装生命周期挂钩中打印状态变量的值时,它们是未定义的。但是,如果我打印状态,它会使用适当的数据记录对象
///component.js
mounted() {
console.log("component mounted")
console.log(this.$store.state.var) // undefined
console.log(this.$store.state) // Obeject with the appropriate data
}
因此,一方面它似乎调度了操作,但是当我尝试从状态访问单个对象时,它会自行崩溃。我尝试访问状态内对象的方式有问题吗?
您需要“等待”getData
承诺解决
当 created() 挂钩运行时,不能有数据
export const store = new Vuex.Store({
state: {
var: []
},
actions:{
getRightSidebar(context){
// must return Promise to subscribe to it!
return axios.get('/endpoint').then(function(response){
context.state.var = res.data.value1;
console.log("action in store.js run");
const app = new Vue({
el: '#app',
store: store,
data: {
isLoading: true
},
async mounted() {
await this.$store.dispatch('getRightSidebar')
// after this there is gonna be some data
this.isLoading = false
}
})
<template>
<div>
<div v-if='isLoading'>loading...</div>
<div v-else>{{$store.state.yourvariable}}</div>
</div>
</template>
我正在使用 Vuex 来尝试管理应用程序级数据。我使用 axios 获取数据,然后将该数据传播到组件中的数据变量。没什么复杂的。
我的店铺是这样的
// store.js
// appropriate imports and such
export const store = new Vuex.Store({
state: {
var: []
},
actions:{
getData(context){
axios.get('/endpoint').then(function(response){
context.state.var = res.data.value1;
console.log("action in store.js run");
//appropriate brackets,etc below
然后我在 app.js
中发送这个动作//appropriate imports and such above
const app = new Vue({
el: '#app',
store: store,
created() {
this.$store.dispatch('getRightSidebar')
console.log("action dispatched")
}
});
我使用创建的生命周期挂钩 来确保在安装组件之前分派此操作。当然,此时应该将 两条 消息记录到控制台。一条消息来自创建的生活方式挂钩,另一条消息来自正在调度的实际操作。但是,当我 运行 应用程序时,只记录前一条消息。当然,当行动被派遣时,实际的 method/request 我是 called/executed.
现在,当我从组件的已安装生命周期挂钩中打印状态变量的值时,它们是未定义的。但是,如果我打印状态,它会使用适当的数据记录对象
///component.js
mounted() {
console.log("component mounted")
console.log(this.$store.state.var) // undefined
console.log(this.$store.state) // Obeject with the appropriate data
}
因此,一方面它似乎调度了操作,但是当我尝试从状态访问单个对象时,它会自行崩溃。我尝试访问状态内对象的方式有问题吗?
您需要“等待”getData
承诺解决
当 created() 挂钩运行时,不能有数据
export const store = new Vuex.Store({
state: {
var: []
},
actions:{
getRightSidebar(context){
// must return Promise to subscribe to it!
return axios.get('/endpoint').then(function(response){
context.state.var = res.data.value1;
console.log("action in store.js run");
const app = new Vue({
el: '#app',
store: store,
data: {
isLoading: true
},
async mounted() {
await this.$store.dispatch('getRightSidebar')
// after this there is gonna be some data
this.isLoading = false
}
})
<template>
<div>
<div v-if='isLoading'>loading...</div>
<div v-else>{{$store.state.yourvariable}}</div>
</div>
</template>