ilokesto

문제 해결

useModal이 프로바이더 오류를 던짐

<ModalProvider> 아래에서 호출하세요. 프로바이더가 오버레이 컨텍스트를 제공하고 호스트도 렌더링합니다.

전역 퍼사드로 열어도 아무것도 보이지 않음

modal.display 또는 modal.open을 호출하기 전에 사용자 지정 스토어가 없는 <ModalProvider>를 정확히 하나 마운트하세요. 사용자 지정 스토어를 받은 프로바이더는 globalModalStore와 격리됩니다.

결과 Promise가 늦게 처리되는 것처럼 보임

의도된 동작입니다. close(result)는 닫기 단계를 시작하며, 어댑터가 종료 모션 뒤에 모달을 제거하면 Promise가 처리됩니다. 의도적으로 즉시 제거해야 할 때만 remove(id)를 사용하세요.

대화상자에 접근 가능한 이름이 없음

화면에 보이는 제목에 ID를 지정하고 ariaLabelledBy를 전달하세요. 보이는 제목이 없다면 ariaLabel을 전달합니다. 패널 안의 텍스트는 자동으로 연결되지 않습니다.

Escape 키 또는 백드롭으로 닫히지 않음

최상단 모달만 반응하며 dismissible={false}는 두 경로를 모두 차단합니다. onDismiss는 가벼운 닫기 동작을 감지할 뿐, 모달을 직접 닫는 함수가 아닙니다.

스타일 지정으로 종료 애니메이션이 사라짐

어댑터는 계산된 애니메이션 재생 시간을 기준으로 한 대체 동작을 사용하므로 모달은 계속 제거됩니다. 사용자 지정 CSS로 모션을 바꾼다면 의도치 않게 긴 재생 시간이 남지 않도록 하세요. 모션 감소를 설정한 사용자는 기다리지 않습니다.

오래된 브라우저나 테스트 DOM에서 top-layer가 실패함

이 전송 방식은 네이티브 <dialog>.showModal()을 호출합니다. inline을 사용하거나 테스트 환경에 폴리필을 제공하거나 대화상자를 지원하는 브라우저를 대상으로 하세요.

두 애플리케이션 영역이 서로 영향을 줌

기본 프로바이더를 여러 개 마운트하지 마세요. @ilokesto/overlay의 createOverlayStore()로 서로 다른 스토어를 만들어 각 프로바이더에 전달하고 각 하위 트리에서 useModal()을 사용하세요.

목차