Ant*_*una 4 javascript vue.js vuex vuejs2
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),
});
Run Code Online (Sandbox Code Playgroud)
吸气剂是这样的:
export const itemGetters = {
allItems: state => state.items,
itemById: (state, getters) => id => getters.allItems.filter(s => s.id === id)[0],
};
Run Code Online (Sandbox Code Playgroud)
现在,我有这个视图,其中有一个嵌套视图。基本上是每个项目的信息模式。
如果我点击链接,我希望去查看填充了项目的元素模式。
export default {
name: 'Landing',
computed: {
items() {
return this.$store.getters.allItems;
}
},
created() {
if (this.items.length === 0) {
this.$store.dispatch('allItems');
}
}
};
Run Code Online (Sandbox Code Playgroud)
现在,输入该视图按预期工作,如果我单击嵌套视图,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
它也确实有效。但是,当我重新加载页面时它不起作用,并且由于还item没有出现错误。
事情是我可以做同样的事情,并添加一个操作来从 API 获取项目,如果它还不存在,但我真的不明白这一点,因为我最终会拥有所有这些。
我需要在这里做什么?
问题是计算属性在组件生命周期的早期就首先被评估。
如果您知道该项目最终会(并且很快)在那里,则只需在该项目尚不存在时在计算中返回一个默认值,这样 Vue在第一次执行时就会呈现一些内容(即使是空的):
computed: {
item() {
return this.$store.getters.itemById(this.id) || {}; // added {} as default.
}
}
Run Code Online (Sandbox Code Playgroud)
一旦项目可用,计算将自动重新评估(因为 getter 会)。
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |