【发布时间】:2019-11-27 14:30:49
【问题描述】:
我搜索了 vue 论坛,有很多 2 年前的答案,但我很难找到一个专门解决这个问题的答案(我正在简化示例):
- 我有一组处于状态的对象(表的行数据)
- 还有一个带有子组件的 tableComponent,它循环遍历数据并为集合中的每个项目创建一行
- 要求是为绑定到rowData.foo的表中的每一行添加一个输入
- tableComponent 有一个计算属性,该属性从 state 中获取 rowData,将这些对象放入一个新的(修改后的)数组中,并将其传递给 tableComponent 模板
- 然后使用 rowData.foo 的 v-model 添加输入
- 这可行,但我最近意识到它正在修改集合中 rowData 项的 foo 属性而不提交突变。
我可以删除 v-model 并使用 @input 提交更改,但我有两个关于它应该如何工作的问题
如果我想阻止这些更改,直到我点击“确认更改”按钮,它是标准/高性能吗? _.cloneDeep 在 tableComponent 计算属性或 vuex getter 中的整个集合。这似乎是很多开销,但也许我对此过于保守?
允许 v-model 直接更新 RowData.foo 意味着每一行都知道要修改哪个 RowData 项,现在我正在对 vuex 集合中的单个对象进行更改,这是进行 vuex 突变的最佳实践_ .找到对象,更改它,然后将整个集合传播回商店?
与我的大多数其他 vue 问题一样,我有多种方法可以让它发挥作用,但我不确定最高效/最好的模式是什么。感谢您的帮助!
更新 这里有简单的代码沙箱:https://codesandbox.io/embed/vuex-store-olrvk 看看 vuex 数据是如何在没有动作调用的情况下更新的?
【问题讨论】:
-
我可以解决这个问题,但真正的问题是:组件应该直接使用 vuex 存储集合还是使用它们的副本
-
是的,他们应该直接访问或改变商店数据
-
我添加了最小可重现示例。谢谢!