【问题标题】:Can't send in a second parameter to the mutation in Vue store无法向 Vue 商店中的突变发送第二个参数
【发布时间】:2016-12-17 18:33:27
【问题描述】:

我有一个很好的像这样的变异 JS 文件。

export default {
  UPDATE_DATA: (state, data, meta) => {
    state.dataTable = data;

    if (meta === undefined)
      return;

    state.activeDataRow = meta;
  }, ...
}

它通过以下方式被不同的操作调用。

context.commit("UPDATE_DATA", Map.table(payload.type, data));
context.commit("UPDATE_DATA", Map.table(payload.type, data), meta);

我检查了动作中发送的元数据,它绝对不是未定义。但是,当我检查突变中的元数据时,它是!为什么?我该如何解决这个问题?

【问题讨论】:

    标签: javascript vue.js vuex


    【解决方案1】:

    vuex docs 的建议是在第二个参数中发送一个有效负载。

    在大多数情况下,payload应该是一个对象,这样它就可以包含多个字段,并且记录的突变也将更具描述性:

    所以你可以用有效载荷这样称呼它:

    context.commit("UPDATE_DATA", {data: Map.table(payload.type, data), meta: meta});
    

    您的突变将如下所示:

    export default {
      UPDATE_DATA: (state, payload) => {
        state.dataTable = payload.data;
    
        if (payload.meta === undefined)
          return;
    
        state.activeDataRow = payload.meta;
      }, ...
    }
    

    还有一种调用突变的替代方法,称为对象样式提交。您可以在提交中传递一个对象,类型为突变名称,如下所示:

    context.commit({
         type:: "UPDATE_DATA", 
         data: Map.table(payload.type, data), 
         meta: meta
    });
    

    【讨论】:

    • 对。我在网页上看到了这一点,但我解释它的方式是,使用有效负载对象是一项建议,而不是技术上的强制要求。这就是为什么当我蹲在元位置时我很惊讶。似乎将所有内容放入有效负载中是一项要求,而不是建议。无论如何,我通过使用从单个操作调用的两个单独的突变来解决它。 (在当前情况下更有意义。)
    • 老兄,我刚刚查看了您的代表图。你已经在懒惰的尺寸上工作了 4 年,然后发生了一些事情——你的名声刚刚爆炸。发生了什么变化?!
    • @KonradViltersten 好吧,我开始使用 Vue :)
    猜你喜欢
    • 2012-08-21
    • 2023-04-08
    • 2021-12-06
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多