모든 컴포넌트
MotionSheet
멈춤 위치, 튕기기, 스크롤 넘겨받기가 있는 아래·위 시트와 옆 서랍.
웹React Native겹침 화면
직접 해 보기
가장 짧은 사용법
Filters.jsx<MotionSheet open={open} onOpenChange={setOpen} detents={[0.45, 0.92]}>
<FilterList />
</MotionSheet>;
대신 처리하는 일
- 드래그를 따라오고, 가장 큰 멈춤 위치 너머에서 버티며, 손을 뗀 속도로 멈춥니다. 튕기면 한 칸 이동하거나 닫힙니다.
- 터치 드래그가 스크롤 내용과 이어집니다. 아래로 당기면 먼저 내용을 맨 위까지 올린 뒤 시트가 움직입니다.
- 멈춤 위치는 화면 비율, 픽셀, 또는 내용 크기인
'content'로 정합니다. - 모달 시트는 포커스를 안에 가두고 페이지를 비활성으로 만들며 Escape나 배경으로 닫힙니다.
이럴 때 쓰세요
- 필터 패널.
- 공유 메뉴.
side="start"로 만드는 내비게이션 서랍.
Props
| Prop | 타입 | 기본값 | 설명 |
|---|
open | boolean | false | 시트를 보일지 여부. |
|---|
onOpenChange | (open) => void | | 시트를 끌어서, 눌러서, Escape로 닫으면 false로 실행됩니다. |
|---|
detents | (number | 'content')[] | ['content'] | 멈추는 크기. 화면 비율, 픽셀, 또는 'content'. |
|---|
detent | number | | 제어하는 멈춤 위치 인덱스. |
|---|
defaultDetent | number | 0 | detent 없이 열 때 쓰는 멈춤 위치 인덱스. |
|---|
onDetentChange | (index) => void | | 시트가 멈춘 위치의 인덱스로 실행됩니다. |
|---|
side | 'bottom' | 'top' | 'start' | 'end' | 'bottom' | 시트가 나오는 가장자리. |
|---|
modal | boolean | true | 배경을 깔고 포커스를 안에 가두며 페이지를 비활성으로 만듭니다. |
|---|
dismissible | boolean | true | 가장 작은 멈춤 위치 너머로 끌기, 배경, Escape로 닫힙니다. |
|---|
backdropClassName | string | | 배경의 클래스. 인라인 스타일은 backdropStyle. |
|---|
transition | Transition | spring | 시간 곡선 { duration, easing } 또는 스프링 { tempo: 'spring', spring }. 스프링은 끊겨도 속도를 이어갑니다. |
|---|
그 밖의 props는 그려지는 요소로 전달되므로 className, style, 이벤트 핸들러를 평소처럼 쓸 수 있습니다.