考虑下面这段话

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"); }
  }
}

这是唯一的办法吗?

推荐答案

您只需将参数传递给正在调用它的方法即可.您只能发送一个参数,该参数将在操作中可用.当使用mapActions时,你不需要做任何特殊的事情

例如,你可以这样称呼它:

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

在vuexstore :

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

您仍然可以使用mapActions:

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

请参阅working fiddle here:您可以在alert 中看到传递的参数:)


下面是从vuex repomapActions的实现

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,并将它们作为dispatch函数的第二个参数.

Vue.js相关问答推荐

如何使用Nuxt 3动态处理无限嵌套路由?

有没有办法在 Quasar 中为明暗模式创建我自己的 colored颜色 ?

Nuxt 2.15.7 的构建错误 - 无法解析 CSS @font-face URL

如何在 A-La-Carte 系统中使用 vuetify 加载程序时导入 vuetify/lib

Vue index.html favicon 问题

v-for 内部的组件

如何渲染数组以 Select 选项 vue.js

Vuetify v-data-table ,如何在 HTML 中呈现标题文本?

Bootstrap-vue b-table,标题中带有过滤器

为什么不先移动鼠标就无法滚动视差?

如何为 Vue 项目设置 lint-staged?

为什么当我 Select 第二个输入框时音译transliteration不起作用?

vuejs挂载生命周期未触发

将 VueJS 数据属性重置为初始值

Vue 3:模块 '"../../node_modules/vue/dist/vue"' 提示

基本 vue.js 2 和 vue-resource http 获取变量赋值

异步api调用后如何使用vuex getter

构建 Vue.js 应用程序时 JavaScript 堆内存不足

标签中的 href 赋值

如何设置 :id 前缀字符串?