【发布时间】:2019-06-04 14:21:39
【问题描述】:
我有很多将参数传递给商店的 getter,例如:
this.$store.getters['getSomeThing'](this.id)
而且我没有找到关于如何以最佳方式使用 mapGetters 来保持反应性,同时传递参数的建议。我发现的一个建议是映射 getter,然后在mounted 中传递参数:
computed: {
...mapGetters([
'getSomeThing'
])
},
mounted () {
this.getSomeThing(this.id)
}
这似乎真的不是最理想的,因为它只会检查挂载状态的变化。关于如何在将参数传递给 getter 时最好地保持反应性的任何建议?下面是一个匹配上述代码的 getter 示例:
getSomeThing: (state) => (id) => {
return state.things.find(t => { return t.id === id })
}
【问题讨论】:
-
如果从
getSomeThing返回的数据没有改变,我最好的猜测是你没有在你的data函数中设置this.id,导致它没有反应。映射器将返回getSomeThing版本,它是静态的。您不想/必须以某种方式返回不同的功能。您希望在更改this.id时再次调用该函数,这显然不会发生。 -
一个沙盒展示了:codesandbox.io/s/kxz40j7z53
-
你有代码示例吗?你的意思是如果
this.id附加的对象发生了变化?在本例中,this.id永远不会改变,但对象的其余部分会。 -
显示使用从这个getter返回的数据的代码。
-
或者,如果您不更改
this.id,而是更改状态,则您可能正在执行无法正确更新状态的操作(例如,没有 vue 辅助函数的对象操作)。我在示例中添加了一些内容,表明如果我们不更改函数的参数而是更改状态,反应性就可以正常工作。
标签: vue.js vuejs2 state vuex flux