javascript - Vuex - 命名空间+mapMutations+函数?

标签 javascript vuejs2 vuex

如何将命名空间与下面的 mapMutations 一起使用?

   methods: {
    addTodo() {
      this.$store.commit('todos/addTodo', this.text)
      this.text = ''
    }
   }

我尝试过:

  methods: {
   ...mapMutations('todos', {
      addTodo () {
        this.$store.commit('addTodo', this.text)
        this.text = ''
      }
     })
   }

我收到此错误:

commons.app.js:19729 [vuex] unknown mutation type: addTodo

有什么想法吗?

最佳答案

它在您的情况下不起作用,因为您实际上并未映射任何突变,而是添加了一个从未知命名空间提交 addTodo 突变的函数。改变 this.$store.commit('addTodo', this.text)this.$store.commit('todos/addTodo', this.text) 可能会解决您的问题问题,但这仍然不是使用mapMutations的正确方法。 mapMutations 应该让您导入突变,然后像任何其他方法一样调用它们。如果您想要任何其他逻辑,例如在示例中重置 text 属性,则必须使用另一种方法来包装您的提交,如下例所示:

  methods: {
    ...mapMutations("todos", ["ADD_TODO"]),
    addTodo() {
      this.ADD_TODO(this.text);
      this.text = "";
    }
  }

或者使用突变别名:

  methods: {
    ...mapMutations("todos", { addTodoMutation: 'ADD_TODO' }),
    addTodo() {
      this.addTodoMutation(this.text);
      this.text = "";
    }
  }

https://codesandbox.io/s/yvjvll56oj

关于javascript - Vuex - 命名空间+mapMutations+函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56119169/

相关文章:

vuejs2 - VueJs + 元素用户界面 : How to custom el-dialog title?

javascript - Vue.js(vuex)。重新加载页面时,计算属性返回未定义。 (vuex 中硬编码的对象数据数组)

javascript - 直接访问 vuex 状态属性(没有 getter)是不好的做法,为什么?

javascript - Chart.js - 向条形图添加渐变

javascript - 使用更改监听器查看 TextArea 内部发生了什么变化

javascript - moment.js 显示错误的日期

vue.js - Vuex 与简单共享数据

javascript - Vue.js - 检测嵌套属性值的变化

javascript - 将数据的json加载到vuex存储中并在组件中访问

javascript - 单击按钮时不显示模态框 - vanilla JavaScript