Closed hasyrails closed 4 years ago
スケジュール更新メソッドを
devidedSchedule
を変更するように記述
methods:{
updateSchedule(devidedSchedule){
const index = this.devidedSchedules.findIndex(devidedSchedule => {
return devidedSchedule.id == schedule.id
})
this.devidedSchedules.splice(index, 1, schedule)
return this.devidedSchedules
}
}
→TypeError: Cannot read property '_wrapper' of undefined
が発生
今回、store/stateで普通に定義されているschedules
ではなく
schedules
をメソッドで操作して作り出した
副産物的なdevidedSchedules
をそのまま変更しようとしていることが原因。
devidedSchedules
のstateとしての登録のされ方について考えるschedules
があるcreatedDevidedSchedules()
メソッドで作られるdevidedSchedules
がstateとして登録される
TypeError: Cannot read property '_wrapper' of undefined
のエラーが発生?
schedules
が変更されるcreateSchedules
が発火するdevidedSchedules
もschedules
の変更に伴った変更された内容で作られる
というように、
おおもとのschedulesが変更しなければならないdevidedSchedules
は
schedules
をもとに作っているのに
おおもとのschedulesを変更していないのにdevidedSchedules単体を変更するのは無理です
という旨のエラーが
今回のTypeError: Cannot read property '_wrapper' of undefined
schedulesを変更する旨の処理を
updateSchedules()
メソッドに記述してみる
updateSchedule(schedule){
// == devidedSchedulesは直接変更できない ==
// const index = this.devidedSchedules.findIndex(devidedSchedule => {
// return devidedSchedule.id == schedule.id
// })
// this.devidedSchedules.splice(index, 1, schedule)
// return this.devidedSchedules
// == schedulesを変更するようなメソッドにしてみる ==
this.schedules.splice(2)
},
重複してしまう内容が現れるのは idの照合で同一の内容を複数作らないよう上書きする処理とする必要がある
TypeError: Cannot read property '_wrapper' of undefined
at remove$2 (vue.runtime.esm.js:6942)
at updateListeners (vue.runtime.esm.js:2259)
scheduleの変更と devidedSchedulesの変更が混在するためのエラー?
v-forによるレンダリング(表示)に使うデータと formで変更を加えるデータとして行き来させるpropsを分けること
<div>
<ScheduleSettingModal
:devidedSchedule="scheduleDetail" // ここが誤り。propsとしてdevidedSchedulesを渡しても直接変更できない
v-for="devidedSchedule in devidedSchedules" // ここは正しいはず(変更不要)
:key="devidedSchedule.id" // ここは正しいはず(変更不要)
v-if="scheduleSettingModalFlag"
@clickCloseButton="closeScheduleSettingModal"
@clickScheduleEditButton="openScheduleEditModal(scheduleDetail)"
></ScheduleSettingModal>
</div>
<div>
<ScheduleEditModal
v-for="schedule in schedules"
:schedule="editSchedule"
:key="schedule.id"
v-if="scheduleEditModalFlag"
@clickScheduleUpdateButton="updateSchedule"
@clickScheduleEditModalCloseButton="closeScheduleEditModal"
></ScheduleEditModal>
</div>
v-for="devidedSchedule in devidedSchedules"
で
リストレンダリングさせている
→ schedulesを変更する実装にしづらい(というより、できない?)v-for = "schedule in schedules"
+ v-if
の条件分岐で
リストレンダリングさせる
スケジュール編集モーダルを実装する
編集モーダルへの遷移
スケジュール詳細モーダル(ScheduleSettingModal) → スケジュール編集モーダルへの遷移
スケジュールの更新
編集フォームに入力、 更新ボタンで予定更新