説明(tl;dr):
を介して vuex のストアからコンポーネントに「オブジェクトのオブジェクト」を渡すv-model
と、モデルの変更でエラーが発生します。「オブジェクトのオブジェクト」が渡された場合のみ。他のタイプでは、すべて問題ありません。
「オブジェクトのオブジェクト」と言ったとき、私はこの構造を意味します: {'A': {name: 'first'}, 'B': {name: 'second'}}
.
ワークフローと構造:
- 構造:
view (page)
->parent
->child
; - ビュー
Object
からストアを取得し、それをコンポーネントに渡します (->parrent
->child
); - "
.sync
" は許可されていないため、コンポーネントはストア内のオブジェクトを変更してはなりません。 - の変更後、結果を 、 に返す
child
必要があり、vuex のセッター経由で保存する必要があります。child
parent
parent
view
view
エラーメッセージ:
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>
PSオブジェクトが参照渡しされたため、問題が発生したと思います。しかし、このエラーと戦う方法は?