vue.js - 更改输入文本值vuex

标签 vue.js vuex nuxt.js

当我尝试更改组件的输入文本的文本时,我在控制台中收到此错误:

[vuex] do not mutate vuex store state outside mutation handlers

我还将 nuxt 与 vuex 结合使用。

我的商店里有这个:

editor.js

export const state = () => ({
  project_blocks: [{
    id: null,
    type: 'text-right',
    content:{
      title: 'Title 2',
      text: 'Text 2',
    }
  },{
      id: null,
      type: 'text-left',
      content:{
        title: 'Title 1',
        text: 'Text 1',
      }
    }],
});

export const mutations = {
  SET_BLOCKS(state, blocks){
    state.project_blocks = blocks;
  },
};


export const getters = {
  project_blocks(state){
    return state.project_blocks;
  }
};

在我的组件中,我有:

Index.vue

<template>
   <component v-for="(block, index) in project_blocks" :key="'module'+index" :block="block" :is="block.type"></component>
</template>

<script>
   export default{
      computed: {
         project_blocks:{
           get(){
             return this.$store.getters['editor/project_blocks'];
           },
           set(val){
             this.$store.commit('editor/SET_BLOCKS', val);
           }
         },
       }
   }
</script>

在我的“组件类型”中,我有:

TextLeft.vue

<template>
   <input type="text" v-model="block.content.title">
   <input type="text" v-model="block.content.text">
</template>

<script>
   export default{
      props:['block']
   }
</script>

当我尝试更改这些输入文本的文本时,出现此错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态 并且我不知道如何修复它:(

谢谢大家!

最佳答案

错误消息在这里(令人惊讶?)很有帮助。当你对某些东西进行 v-model 时,你是在说“当这个输入发生变化时,修改我给你的这个东西的值。”

然而,正如错误所示,这会导致您直接改变 Vuex 存储的数据,这不是 Vuex 喜欢的完成方式。你应该使用你的突变。

编辑:以下评论是错误的。谢谢,涛! 旁注:您的 set(val) 函数不应位于 compulated 中,而应位于 methods 中。

关于vue.js - 更改输入文本值vuex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61805548/

相关文章:

javascript - 如何在 Vue.js 中有条件地渲染元素?

plugins - 如何在 Nuxt 插件中使用错误函数?

vue.js - Nuxt head() 不等待 head 的 asyncData 响应

environment-variables - 上传到 Zeit/Now 时客户端中暴露的 Nuxt 环境变量

javascript - 在带参数的函数内部动态使用 Vue $refs

vue.js - 如何从 bootstrap-vue 模态监听事件?

javascript - 如何在 Vue.js 2.0 中设置全局分隔符?

javascript - 为什么我们需要 mutations、setters 和 getters 来进行状态管理?

javascript - 如何使用 Vuex Store 和计算属性循环传递给组件的对象数组?

vue.js - 如何使用 Vue/Vuex 正确排序调用