描述(tl;博士):
当我通过 将“对象的对象”从 vuex 的商店传递给组件时v-model
,模型的修改会产生错误。只有当“对象的对象”通过时。对于任何其他类型,一切都很好。
当我告诉“对象的对象”时,我的意思是这种结构:{'A': {name: 'first'}, 'B': {name: 'second'}}
.
工作流程和结构:
- 结构:
view (page)
->parent
->child
; - 查看
Object
从商店获取一个并将其传递给组件(->parrent
->child
); - 不允许使用 "
.sync
",因此组件不应改变存储中的对象; - 更改后
child
,child
必须将结果返回到parent
,parent
到view
,并view
应通过 vuex 的 setter 保存;
错误消息:
Error when evaluating setter "value.name": Error: [vuex] Do not mutate vuex store state outside mutation handlers. (found in component: <child>)
吸气剂(来自商店):
getObjFromStore // return {'A': {name: 'first'}, 'B': {name: 'second'}}
查看(页面):
<parent :value="getObjFromStore"></parent>
父组件:
<template>
<div v-for="v in value">
<child :value="v"></child>
</div>
</template>
<script>
import Child from 'components/child'
export default {
data () {
return {}
},
props: {
value: {
type: Object
}
},
components: {
Child
}
}
</script>
子组件:
<template>
<input type="text" v-model="value.name">
</template>
<script>
export default {
data () {
return {}
},
props: {
value: {
type: Object
}
}
}
</script>
PS我认为问题的发生是因为对象通过引用传递。但是如何对抗这个错误呢?