You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(1) 시트 렌더 조건과 컨트롤 배치가 서로 다른 입력을 봤다. isSearchOpen / isMapLoading / displayedLockerDetail 세 게이트가 시트만 지우고 sheetMode 는 그대로 두어, 시트가 없는데도 컨트롤이 계속 시트를 따라갔다. 수정 전/후 배포본에서 인라인 bottom 을 직접 읽어 확인했다.
상태
수정 전
수정 후
목록 시트 위에서 검색 오버레이 재진입
clamp(70px, 100dvh - 763px, …)
70px
(2) 바닥 위치를 모션 값과 정적 값으로 갈아끼웠다.
(1)을 고친 뒤에도 이 이슈의 경로에서 같은 화면이 한 번 잡혔다. 그때 인라인 스타일은 사라진 시트의 오프셋을 가리키는 clamp 문자열이었고, 창 크기를 바꿔 리렌더를 강제해도 갱신되지 않았다.
계측 빌드를 프리뷰에 올려 상태 전이를 직접 읽은 결과 React 상태는 정상이었다.
detail/full → shouldTrackSheet:true, liveOffset:808 → bottom 469
X 클릭 → shouldTrackSheet:false, visibleSheetKind:null → 기본 자리
다음 렌더 → liveOffset 리셋
즉 상태는 "시트 없음" 인데 DOM 만 과거에 머물렀다.#194 에서 바닥 위치를 늘 같은 모션 값이 쥐게 바꿔(갈아끼우는 순간 자체를 없앰) 이 경로를 닫았다.
단위 혼용 — 여전히 열려 있음. 밀어 올린 위치는 JS 픽셀값(sheetLiveOffset, innerHeight 기준)과 CSS 100dvh 를 한 식에서 섞는다. 시트가 떠 있는 동안 둘이 어긋나면(모바일 주소창 접힘 등) 위치가 밀릴 수 있다. 시트가 없을 때는 fix: 시트가 없는데 시트 윗변에 남던 지도 컨트롤 위치 #194 가 센티넬 값으로 무력화했지만, 시트가 있을 때는 그대로다
상세 단계 고착 → 기각. openLockerDetailById 가 조회 전 항상 플레이스홀더를 넣으므로 조회 실패에도 selectedLockerDetail 이 non-null 이고, 상세 시트는 오류 UI 로 렌더된다 (아래 코멘트 참고)
증상
시트가 화면에 없는데 새로고침·내 위치 버튼만 화면 중앙쯤에 떠 있다. 헤더와 검색 바는 보이고, 지도에는 직전에 선택했던 핀만 남아 있다.
제보 스크린샷
스크린샷에서 읽은 값 (481 × 1310px 뷰포트):
재현 경로
타이밍 의존이라 항상 나오지는 않는다. 자동화된 클릭으로는 계측 전 8회 중 1회 잡혔고, 계측을 붙인 뒤로는 10회 넘게 재현되지 않았다.
진행 상황
확정하고 고친 것 — #194
(1) 시트 렌더 조건과 컨트롤 배치가 서로 다른 입력을 봤다.
isSearchOpen/isMapLoading/displayedLockerDetail세 게이트가 시트만 지우고sheetMode는 그대로 두어, 시트가 없는데도 컨트롤이 계속 시트를 따라갔다. 수정 전/후 배포본에서 인라인bottom을 직접 읽어 확인했다.clamp(70px, 100dvh - 763px, …)70px(2) 바닥 위치를 모션 값과 정적 값으로 갈아끼웠다.
(1)을 고친 뒤에도 이 이슈의 경로에서 같은 화면이 한 번 잡혔다. 그때 인라인 스타일은 사라진 시트의 오프셋을 가리키는 clamp 문자열이었고, 창 크기를 바꿔 리렌더를 강제해도 갱신되지 않았다.
계측 빌드를 프리뷰에 올려 상태 전이를 직접 읽은 결과 React 상태는 정상이었다.
즉 상태는 "시트 없음" 인데 DOM 만 과거에 머물렀다. #194 에서 바닥 위치를 늘 같은 모션 값이 쥐게 바꿔(갈아끼우는 순간 자체를 없앰) 이 경로를 닫았다.
가설 정리
안착 전 이탈로→ fix: 시트가 없는데 시트 윗변에 남던 지도 컨트롤 위치 #194 에서 시트가 사라질 때isSheetSettled가 false 로 굳음true로 되돌리도록 함께 처리sheetLiveOffset,innerHeight기준)과 CSS100dvh를 한 식에서 섞는다. 시트가 떠 있는 동안 둘이 어긋나면(모바일 주소창 접힘 등) 위치가 밀릴 수 있다. 시트가 없을 때는 fix: 시트가 없는데 시트 윗변에 남던 지도 컨트롤 위치 #194 가 센티넬 값으로 무력화했지만, 시트가 있을 때는 그대로다상세 단계 고착→ 기각.openLockerDetailById가 조회 전 항상 플레이스홀더를 넣으므로 조회 실패에도selectedLockerDetail이 non-null 이고, 상세 시트는 오류 UI 로 렌더된다 (아래 코멘트 참고)남은 것
재발 시 진단
clamp(70px, 100dvh - <실제 오프셋>px, …)→ 시트를 아직 따라가는 중. 가설 2 쪽clamp(70px, 100dvh - 999988px, …)인데 눈으로 떠 보임 → 전혀 다른 원인(스크롤·뷰포트 계산). 999988 은 "시트 없음" 센티넬이라 정상값이다bottom - 시트 가시높이가 12px 인지 본다한 번의 재현으로 확정하는 계측 스니펫
콘솔에 붙여 두고 재현한 뒤
window.__probe를 확인한다. 값이 바뀔 때만 기록한다.관련: #194