vuex在严格模式下面,表单处理中嵌套多层数据怎么办

vuex

state:{
    currentFieldIndex:-1, //用于定位当前修改的field在fields中的下标
    fields:[]  //动态添加字段,例如:name,label,sex
}
mutations:{
    setFieldEdit (state,value){
        const index = state.currentFieldIndex
        state.fields[index] = Object.assign({},state.fields[index],value)
    }
}

field.vue

<el-form-item :label="name+'的标签'">
    <el-input 
        v-model="label">
    </el-input>
</el-form-item>
computed:
{
    currentFieldIndex () {
        return this.$store.state.formCustom.currentFieldIndex
    },
    name () {
        return this.$store.state.formCustom.fields[this.currentFieldIndex].name
    },
    label :{
        get () {
            return this.$store.state.formCustom.fields[this.currentFieldIndex].label
        },
        set (value) {
            this.setFieldEdit({ label: value })
        }
    }            
},
methods:{
    ...mapMutations([
        'setFieldEdit'
    ])
},

通过动态添加state.fields结构如下:

[
    {
        name:'1_name',
        label:'1_label',
        ...
    },
    {
        name:'2_name',
        label:'2_label',
        ...
    },
    {
        name:'3_name',
        label:'4_label',
        ...
    },
    ...
]

就是现在 field里面的值虽说可以得到 但是在页面上面无法修改,调用了mutations>setFieldEdit 方法但是没有实时显示出来。
我将fields里面的数据,只单独写一个对象没有使用多层嵌套,就可以的。
请教一下,首先我这种写法对吗?我参考了Vuex 严格模式下的表单处理,如果不对,需要怎么写,谢谢

阅读 3.1k
1 个回答

https://cn.vuejs.org/v2/guide...

mutations:{
    setFieldEdit (state,value){
        const index = state.currentFieldIndex
        //错误示例 state.fields[index] = Object.assign({},state.fields[index],value)
        state.fields.splice(index,1,Object.assign({},state.fields[index],value))
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题