如何将参数传递给使用... mapActions(...)映射的函数?

时间:2016-12-01 12:34:31

标签: javascript ecmascript-6 vue.js

考虑以下段落

export default {
  methods: {
    ...mapActions(["updateData", "resetData"]);
  }
}

我想将参数传递给被调用的函数。在保留...mapAction()电话时不确定如何正确地执行此操作,我不得不重写以下内容。

export default {
  methods: {
    // ...mapActions(["updateData", "resetData"])
    updateData: function() { this.$store.dispatch("updateData", "names") },
    resetData: function() { this.$store.dispatch("resetData"); }
  }
}

这是唯一的方法吗?

1 个答案:

答案 0 :(得分:9)

您可以将参数传递给您调用它的方法。您只能发送一个参数,该参数将在操作中可用。使用mapActions

时,您无需执行任何特殊操作

例如,您可以将其称为:

<button @click=updateData({data1: 1, data2: 2})>

并在vuex商店中:

const actions = {
  updateData: (state, data) => {
     //You will get passed parameter as data here
  },

你仍然可以使用mapActions:

export default {
  methods: {
    ...mapActions(["updateData", "resetData"]);
  }
}

查看工作小提琴here:您可以在警告中看到传递的参数:)

以下是vuex repo

mapActions的实施情况
export function mapActions (actions) {
  const res = {}
  normalizeMap(actions).forEach(({ key, val }) => {
    res[key] = function mappedAction (...args) {
      return this.$store.dispatch.apply(this.$store, [val].concat(args))
    }
  })
  return res
}

你可以看到传递args并将它们作为调度函数的第二个参数。