【发布时间】:2017-01-08 00:07:58
【问题描述】:
描述(tl;dr):
当我通过 v-model 将“对象的对象”从 vuex 的存储区传递给组件时,模型的修改会产生错误。 仅在“Object of Objects”通过时。对于任何其他类型,一切正常。
当我说“对象的对象”时,我指的是这个结构:{'A': {name: 'first'}, 'B': {name: 'second'}}。
工作流程和结构:
- 结构:
view (page)->parent->child; - View 从 store 中获取
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>)
Getter(来自商店):
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>
P.S. 我认为问题的发生是因为对象通过引用传递。但是如何解决这个错误呢?
【问题讨论】:
标签: javascript vue.js vue-component vuex