【发布时间】:2019-05-25 02:57:38
【问题描述】:
我将 Vuex 与过滤大量数据的 getter 一起使用,然后一些组件将其按状态分组呈现给用户。用户可以将每个状态的元素的可见计数增加 5。当前可见的项目数量在 Vuex 存储中,getter 使用它来创建“视图对象”。
当我更新此可见性对象时,getter 不会重新运行,因此依赖项跟踪中的某些东西会向南。我没有添加或删除属性,我仍然使用Vue.set(...) 来确定。
这是增加状态项目可见数量的突变:
viewMore(state, status) {
console.log('viewMore')
const current = state.visibility.statuses[status]
Vue.set(state.visibility.statuses, status, current + 5)
}
这种突变运行良好,我可以在开发人员工具中看到可见性如何随着每次提交而反应性地增加。现在这里是依赖于这些数据的 getter:
visibleProspects(state, getters) {
console.log('visibleProspects')
let result = {}
for (const status in getters.sourceData) {
if (!result[status]) {
result[status] = { prospects: [] }
}
getters.sourceData[status].forEach(function(prospect) {
if (result[status].prospects.length < state.visibility.statuses[status])
result[status].prospects.push(prospect)
})
}
return result
}
它的作用是遍历一个名为 sourceData 的复杂 getter(为简洁起见,此处未显示),然后根据有多少可见项,它会在数组中返回一个具有该最大值的新结构。 visibleProspects 然后被我的组件使用,并且一切运行良好第一次或者如果更新 sourceData 计算的数据(例如添加/编辑/删除潜在客户).. 但无论我做什么修改 state.visibility.statuses 不会强制 visibleProspects 重新计算。
如何调试?
【问题讨论】: