【发布时间】:2018-10-08 10:52:54
【问题描述】:
这里是 Vuex 的新手问题。可能是做错了什么。我有这个简单的商店:
export default new Vuex.Store({
strict: process.env.NODE_ENV !== 'production',
state: {
items: []
},
getters: Object.assign({}, itemGetters),
mutations: Object.assign({}, itemMutations),
actions: Object.assign({}, itemActions),
});
getter 是这样的:
export const itemGetters = {
allItems: state => state.items,
itemById: (state, getters) => id => getters.allItems.filter(s => s.id === id)[0],
};
现在,我有一个包含嵌套视图的视图。基本上是每个项目的信息模式。
如果我点击链接,我希望去查看填充了项目的元素模式。
export default {
name: 'Landing',
computed: {
items() {
return this.$store.getters.allItems;
}
},
created() {
if (this.items.length === 0) {
this.$store.dispatch('allItems');
}
}
};
现在,输入该视图按预期工作,如果我单击嵌套视图,如下所示:
<template>
<div class="text">
<h1 class="heading">{{ item.title }}</h1>
</div>
</template>
<script>
export default {
name: 'InfoModal',
props: ['id'],
computed: {
item() {
return this.$store.getters.itemById(this.id);
}
}
};
</script>
它也确实有效。但是,由于item 还没有出现,我只是重新加载页面和错误时它不起作用。
事情是我可以做同样的事情并添加一个动作来从 API 中获取项目,如果它还没有,但我真的不明白这一点,因为我最终会拥有所有这些。
我需要在这里做什么?
【问题讨论】:
-
检查项目是否未定义,如果是,则显示加载屏幕直到它被定义
-
vuex.state 在重新加载时被清除。检查Vuex state on page refresh;如果用户重新加载,通常我所做的是重定向到登录/主页视图。但如果你不这样做,请查看上述 URL 的答案。
标签: javascript vue.js vuejs2 vuex