当用户尝试直接导航加载组件 url 时,会在我的 vuex 操作中进行 http 调用,一旦它解析,它将在我的状态中定义一个值。
在解析 http 调用并定义状态值之前,我不想加载我的组件。
例如,在我的组件中
export default {
computed: {
...mapState({
// ** this value needs to load before component mounted() runs **
asyncListValues: state => state.asyncListValues
})
},
mounted () {
// ** I need asyncListValues to be defined before this runs **
this.asyncListValues.forEach((val) => {
// do stuff
});
}
}
在加载我的组件之前,如何让我的组件等待 asyncListValues
加载?
原文由 Edon 发布,翻译遵循 CC BY-SA 4.0 许可协议
一种方法是存储状态值。
例如,如果您的商店依赖于单个 API,您可以这样做。但是,对于多个 API,最好单独存储每个 API 加载状态,或者为每个 API 使用专用对象。
通常有 4 种状态,我更喜欢在全局可访问的模块中使用:
然后,您可以将变量存储在 vuex 状态中,其中 apiState 使用
INIT
初始化。您还可以使用[]
初始化数组,但这不是必需的。然后,通过添加一些
computed
变量,您可以切换显示哪个组件。使用状态的好处是您可以轻松识别错误状态,并在状态未就绪时显示加载动画。除了… 我使用这种模式来管理我的应用程序作为状态机。虽然此示例使用 vuex,但它可以调整为在组件中使用,使用
Vue.observable
(vue2.6+) 或ref
(vue3)。或者,如果您只是在商店中使用空数组
[]
初始化您的asyncListValues
--- ,则可以避免期望数组的错误。