javascript - VueX 通过提交从操作更新状态

标签 javascript vue.js ecmascript-6 vuejs2 vuex

我对 Vuex 还很陌生,有人可以告诉我为什么我无法从操作访问状态、修改它,然后提交它吗?在更改状态数组之前,我会对其进行“深层”复制。执行此操作的替代最佳实践方法是什么?

这是我的行动:

[Action.UPDATE_CHERRYPICK_SIZE] ({ state, commit }, { recipe, size }) {
    var shoppinglist = [...state.shoppinglist]
    var cp = shoppinglist.find(v => v.recipe.id === recipe.id)
    cp.size = size
    commit(Mutation.SET_SHOPPINGLIST, shoppinglist)
}

最佳答案

仅对突变中的状态进行更改。 (这就是它被称为突变的原因。)您不需要克隆该列表。创建一个突变来设置 cp 大小:

SET_CP_SIZE(state, { cp, size }) {
  cp.size = size;
}

在你的行动中:

[Action.UPDATE_CHERRYPICK_SIZE] ({ state, commit }, { recipe, size }) {
  var cp = state.shoppinglist.find(v => v.recipe.id === recipe.id)
  commit(Mutation.SET_CP_SIZE, { cp, size })
}

这种方式不会直接在突变中使用state,但这很好。相反,您正在设置 cp,它是某个状态数组的一项。

关于javascript - VueX 通过提交从操作更新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60224360/

相关文章:

javascript - 加上删除字符串的其他部分并只保留匹配

javascript - 如何在 Meteor 上使用 IronRouter 在操作中设置数据?

javascript - typescript 错误 : Object literal may only specify known properties, 和 'router' 在“ComponentOptions<Vue”类型中不存在

javascript - HTML YouTube 视频链接不显示视频,但下载文件

javascript - 在 Google Apps 脚本中使用转译的 ES6 => ReferenceError : "SomeClass" is not defined

Javascript:如何创建一个既像对象又像函数的变量?

javascript - jquery逻辑从字符串中获取结果

javascript - 自定义按钮移除单击时的焦点,但不移除 Enter 按键的焦点

javascript - rails redirect_to 格式 html 在 js 中发送响应

javascript - 类型 'XXX' 上不存在属性 'CombinedVueInstance<Vue, {}, {}, {}, Readonly<Record<never, any>>>'