我正在使用vuex和一个数据树。它是响应式的,并且工作良好,因为我们有一个对应的组件树。因为结构是一个树,所以通常需要改变一个嵌套得很深的子对象。实现这一点的简单方法是使用一个在其有效负载中接受孩子的变体:
removeLeaf(state, { child, leaf }) {
child.children = child.children.filter((i: any) => i !== leaf);
state = state; // silence warning
},另一种方法是更改突变,使其工作方式如下:
removeLeaf(state, { child_, leaf }) {
let child = searchForChild(state, child_);
child.children = child.children.filter((i: any) => i !== leaf);
},我对第一种方式很满意。编写通过使用有效负载而不是state参数来修改state的子对象的突变是否有任何缺点?
发布于 2019-05-23 10:08:05
我不认为它能正常工作。
Javascript Vue和Vuex的反应系统是基于 和Javascript
如果您在任何突变中对state执行console.log操作,您将看到如下所示:

get和set是你的Vuex状态的getter和setter。
没有二传手,Vue的反应系统可能无法工作。
在你的变种中试试console.log state和child。您可能会看到child 不包含setter。
如果setter不在那里,Vue就不会知道您已经更新了child的状态,并且您很可能会遇到反应性问题。
https://stackoverflow.com/questions/56264005
复制相似问题