Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 不在变异处理程序之外变异Vuex存储状态(错误)_Vue.js_Vuejs2_Vuex - Fatal编程技术网

Vue.js 不在变异处理程序之外变异Vuex存储状态(错误)

Vue.js 不在变异处理程序之外变异Vuex存储状态(错误),vue.js,vuejs2,vuex,Vue.js,Vuejs2,Vuex,因此,我得到以下错误消息: [Vuex]不要在变异处理程序之外变异Vuex存储状态 根据Vuex,此错误背后的原因是以下代码试图直接改变状态 <template> <div v-for="item in basicInformation" :key="item.id"> <el-col :span="12"> <el-form-item label="First Name"> <

因此,我得到以下错误消息:

[Vuex]不要在变异处理程序之外变异Vuex存储状态

根据Vuex,此错误背后的原因是以下代码试图直接改变状态

<template>
   <div v-for="item in basicInformation" :key="item.id">
     <el-col :span="12">
          <el-form-item label="First Name">
              <el-input v-model="item.firstName" />
          </el-form-item>
     </el-col>
   </div>
</template>

export default {
        computed: {
            ...mapState(['teststore']),
            basicInformation: {
                get() {
                    return this.teststore.personData.basicInformation
                },
                set(value) {
                    this.$store.commit('updateBasic', value)
                }
            }
        }
    }

为我的所有inputfields创建一个带有setter的双向计算属性似乎非常冗长。有没有一种简单的方法可以让我使用Vuex,最好是带有对象数组的v-model来创建inputfields?

您可以创建一个基本信息的副本,使其位于组件范围内

因此,将计算属性与基本信息相关联,并在v型模型中使用它将消除此警告

计算:{ 局部碱性信息{ 返回[…此基础信息]; }, },
只需尝试一下浅拷贝和深拷贝之间的区别。如果this.localBasicInformation很深,则spread运算符将不起作用,您将需要类似lodash的信息。

我会这样做:

代码沙盒:

导出默认值{ 计算:{ …mapState['teststore'], 碱基形成{ 返回此.teststore.personData.basicInformation }, }, 方法:{ onInput{key,value}{ 这个.$store.commit'updateBasic',{key,value} }, 凯托拉贝尔基{ //这只是一个例子 常数keyToLabel={ 名字:“名字”, //等等。。。 } 返回键标签[键] }, }, } //在你的店里,像这样的 常数存储={ // ... 突变:{ updateBasicstate,{key,value}{ state.teststore.basicInformation[键]=值 }, }, }
首先,感谢您的回复!我尝试实现此功能,但收到以下错误消息:无效的属性:属性值的类型检查失败。应该是字符串,数字,我用你的代码创建了一个对象。你能告诉我这个错误是从哪里来的吗?当然,问题是基本信息是一个数组,我不明白为什么。我在这里删除了它:。请毫不犹豫地添加console.log语句,以查看发生了什么。另外,如果您确实需要数组来显示许多人的基本信息,那么您需要一个包装元素ex:a和v-for。嗨,Phil,再次感谢您的帮助。。我知道我可能在问一些明显的问题,我只是想把我的脑袋绕在这上面。。。它必须是数组的原因是,用户可以在主personData obj中处理不同的对象数组。我再次尝试使用外部div实现您的解决方案,以使其与阵列一起工作,但我再次无法使其工作。。。看见你能再帮我一次吗?
personData: {
        basicInformation: [
            {
                firstName: '',
                surname: '',
                email: '',
                phone: '',
                street: '',
                city: '',
                position: '',
                website: '',
            }
        ],
}