diff --git a/packages/frontend/src/world/room/controller.ts b/packages/frontend/src/world/room/controller.ts index c74bc3e1fc..095356e54c 100644 --- a/packages/frontend/src/world/room/controller.ts +++ b/packages/frontend/src/world/room/controller.ts @@ -141,14 +141,15 @@ export class RoomController { if (deepEqual(this.roomState.value, roomState)) return; // vueのリアクティビティが反応して無限ループになることがあるため this.roomState.value = JSON.parse(JSON.stringify(roomState)); if (this.selected.value != null) { - // そのまま入れると「オブジェクト(newSelected)の内容」は変わってるけど「オブジェクトの参照」そのものは変化していないから、 - // その状態で代入しようがtriggerRef呼ぼうがVueは「子に対しては」更新があったと見做してくれない(親から当該refをwatchする場合は発火する)っぽい(バグか仕様かは不明) - // そのため新しい参照にするためにdeepClone - const newSelected = JSON.parse(JSON.stringify(roomState.installedObjects.find(o => o.id === this.selected.value.objectId))); + const newSelected = roomState.installedObjects.find(o => o.id === this.selected.value.objectId); if (newSelected) { this.selected.value = { objectId: newSelected.id, - objectState: newSelected, + + // そのまま入れると「オブジェクト(newSelected)の内容」は変わってるけど「オブジェクトの参照」そのものは変化していないから、 + // その状態で代入しようがtriggerRef呼ぼうがVueは「子に対しては」更新があったと見做してくれない(親から当該refをwatchする場合は発火する)っぽい(バグか仕様かは不明) + // そのため新しい参照にするためにdeepClone + objectState: JSON.parse(JSON.stringify(newSelected)), }; } else { this.selected.value = null;