当你尝试从API加载数据并在多个组件中使用时,Vuex getters具有未定义的数据,可能是由于以下几个原因导致的:
针对这个问题,你可以尝试以下解决方案:
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
data: null
},
mutations: {
setData(state, data) {
state.data = data
}
},
actions: {
fetchData({ commit }) {
// 发起API请求,并在数据加载完成后更新state中的数据
// 例如使用axios库发送请求
axios.get('/api/data')
.then(response => {
commit('setData', response.data)
})
.catch(error => {
console.error(error)
})
}
},
getters: {
getData(state) {
return state.data
}
}
})
export default store
// MyComponent.vue
<template>
<div>
<button @click="fetchData">加载数据</button>
<div v-if="data">{{ data }}</div>
</div>
</template>
<script>
import { mapActions, mapGetters } from 'vuex'
export default {
computed: {
...mapGetters(['getData']),
data() {
return this.getData
}
},
methods: {
...mapActions(['fetchData'])
}
}
</script>
这样,当你点击"加载数据"按钮时,会触发fetchData action来发起API请求,并在数据加载完成后更新state中的数据。然后,你可以通过调用getData getter来获取已经定义的数据,并在组件中使用它。
推荐的腾讯云相关产品:腾讯云云开发(Tencent Cloud CloudBase),它是一款支持前后端一体化开发的云原生应用开发平台。它提供了云函数、云数据库、云存储等服务,可以帮助开发者快速构建和部署应用。你可以在腾讯云官网了解更多关于腾讯云云开发的信息:腾讯云云开发
领取专属 10元无门槛券
手把手带您无忧上云