Skip to content

fix: 리렌더 시 버려지는 필드의 옵저버를 정리해 슬롯 값이 10으로 덮이는 문제 수정 - #3092

Open
kimorkim wants to merge 1 commit into
developfrom
jira/199
Open

fix: 리렌더 시 버려지는 필드의 옵저버를 정리해 슬롯 값이 10으로 덮이는 문제 수정#3092
kimorkim wants to merge 1 commit into
developfrom
jira/199

Conversation

@kimorkim

Copy link
Copy Markdown
Collaborator

_startContentRender 는 리렌더마다 필드를 새로 만들면서 _contents 를 비우지만, 버려지는 필드가 슬롯 안 블록의 뷰에 걸어둔 _posObserver/_sizeObserver 는 끊지 않았음. 슬롯 안 블록은 params 에 살아있어 그 옵저버도 함께 남고, 블록을 교체할
때 bumpAway 가 0.15초 뒤 위치를 바꾸면 이미 버려진 필드가
updateValueBlock(undefined) 으로 깨어나 params 를 빈 슬롯 기본값(10)으로 덮어씀. 화면은 현재 필드가 그린 것이라 정상으로 보이고 toJSON/copy 만 params 를 읽으므로, 저장 후 새로고침에서야 값이 바뀐 것이 드러남.

_contents 를 비우기 전에 각 필드의 _destroyObservers 를 호출해 옵저버 누적을 막고, 같은 취약점이 있는 FieldOutput 에도 _destroyObservers 메서드를 추출해 적용. destroy() 는 슬롯 안 블록의 뷰까지 파괴하므로 리렌더 경로에서는 쓰지 않음.

_startContentRender 는 리렌더마다 필드를 새로 만들면서 _contents 를 비우지만,
버려지는 필드가 슬롯 안 블록의 뷰에 걸어둔 _posObserver/_sizeObserver 는 끊지
않았음. 슬롯 안 블록은 params 에 살아있어 그 옵저버도 함께 남고, 블록을 교체할
때 bumpAway 가 0.15초 뒤 위치를 바꾸면 이미 버려진 필드가
updateValueBlock(undefined) 으로 깨어나 params 를 빈 슬롯 기본값(10)으로
덮어씀. 화면은 현재 필드가 그린 것이라 정상으로 보이고 toJSON/copy 만 params 를
읽으므로, 저장 후 새로고침에서야 값이 바뀐 것이 드러남.

_contents 를 비우기 전에 각 필드의 _destroyObservers 를 호출해 옵저버 누적을
막고, 같은 취약점이 있는 FieldOutput 에도 _destroyObservers 메서드를 추출해
적용. destroy() 는 슬롯 안 블록의 뷰까지 파괴하므로 리렌더 경로에서는 쓰지 않음.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant