【发布时间】:2019-03-11 07:38:24
【问题描述】:
在我的 Vue 应用程序中,我有 Vuex 存储模块,其中包含大量处于其状态的资源对象。为了轻松访问这些数组中的单个资源,我制作了 Vuex getter 函数,将资源或资源列表映射到各种键(例如“id”或“tags”)。这会导致性能下降和巨大的内存占用。如何在没有大量重复数据的情况下获得相同的功能和反应性?
存储模块示例
export default {
state: () => ({
all: [
{ id: 1, tags: ['tag1', 'tag2'] },
...
],
...
}),
...
getters: {
byId: (state) => {
return state.all.reduce((map, item) => {
map[item.id] = item
return map
}, {})
},
byTag: (state) => {
return state.all.reduce((map, item, index) => {
for (let i = 0; i < item.tags.length; i++) {
map[item.tags[i]] = map[item.tags[i]] || []
map[item.tags[i]].push(item)
}
return map
}, {})
},
}
}
组件示例
export default {
...,
data () {
return {
itemId: 1
}
},
computed: {
item () {
return this.$store.getters['path/to/byId'][this.itemId]
},
relatedItems () {
return this.item && this.item.tags.length
? this.$store.getters['path/to/byTag'][this.item.tags[0]]
: []
}
}
}
【问题讨论】:
标签: javascript vue.js vuejs2 vuex