【问题标题】:Will vuex work properly with generic mutations that don't reference `state`?vuex 能否与不引用“状态”的通用突变一起正常工作?
【发布时间】:2019-05-22 19:50:22
【问题描述】:

我正在使用带有数据树的 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);
},

我对第一种方式很满意。通过使用有效负载而不是状态参数来编写修改状态子对象的突变有什么缺点吗?

【问题讨论】:

    标签: vue.js vuex


    【解决方案1】:

    我认为它不会正常工作。

    Vue 和 Vuex 的反应系统基于 Javascript GetterSetter

    如果您在任何突变中控制台记录state,您将看到如下内容:

    getset 是 Vuex 状态的 getter 和 setter。

    如果没有 setter,Vue 的反应系统可能无法工作。

    在你的突变中尝试 console.log statechild。您可能会看到 child 不包含 setter

    如果 setter 不存在,Vue 不会知道你更新了 child 的状态,你很可能会遇到反应问题。

    【讨论】:

    • 反应性似乎运作良好。我会检查日志。
    猜你喜欢
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2018-11-30
    • 2020-03-21
    • 1970-01-01
    • 2020-09-06
    • 2018-11-10
    相关资源
    最近更新 更多