2

このような素敵な突然変異 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);

アクションで送信されるメタを確認しましたが、undefinedではありません。しかし、ミューテーションでメタを確認すると、あります!なんで?どうすればこの問題を解決できますか?

4

1 に答える 1

8

vuex docsが示唆しているのは、2 番目の引数でペイロードを送信することです。

ほとんどの場合、ペイロードは複数のフィールドを含むことができるようにオブジェクトである必要があり、記録されたミューテーションもより説明的になります。

したがって、ペイロードを使用して次のように呼び出すことができます。

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;
  }, ...
}

Object-Style Commit と呼ばれるミューテーションを呼び出す別の方法もあります。次のように、タイプをミューテーション名としてコミットでオブジェクトを渡すことができます。

context.commit({
     type:: "UPDATE_DATA", 
     data: Map.table(payload.type, data), 
     meta: meta
});
于 2016-12-18T00:48:55.517 に答える