모든 컴포넌트

MotionSheet

멈춤 위치, 튕기기, 스크롤 넘겨받기가 있는 아래·위 시트와 옆 서랍.

웹React Native겹침 화면

직접 해 보기

예제를 준비하는 중…

가장 짧은 사용법

Filters.jsx
<MotionSheet open={open} onOpenChange={setOpen} detents={[0.45, 0.92]}>
  <FilterList />
</MotionSheet>;

대신 처리하는 일

  • 드래그를 따라오고, 가장 큰 멈춤 위치 너머에서 버티며, 손을 뗀 속도로 멈춥니다. 튕기면 한 칸 이동하거나 닫힙니다.
  • 터치 드래그가 스크롤 내용과 이어집니다. 아래로 당기면 먼저 내용을 맨 위까지 올린 뒤 시트가 움직입니다.
  • 멈춤 위치는 화면 비율, 픽셀, 또는 내용 크기인 'content'로 정합니다.
  • 모달 시트는 포커스를 안에 가두고 페이지를 비활성으로 만들며 Escape나 배경으로 닫힙니다.

이럴 때 쓰세요

  • 필터 패널.
  • 공유 메뉴.
  • side="start"로 만드는 내비게이션 서랍.

Props

Prop타입기본값설명
openbooleanfalse시트를 보일지 여부.
onOpenChange(open) => void시트를 끌어서, 눌러서, Escape로 닫으면 false로 실행됩니다.
detents(number | 'content')[]['content']멈추는 크기. 화면 비율, 픽셀, 또는 'content'.
detentnumber제어하는 멈춤 위치 인덱스.
defaultDetentnumber0detent 없이 열 때 쓰는 멈춤 위치 인덱스.
onDetentChange(index) => void시트가 멈춘 위치의 인덱스로 실행됩니다.
side'bottom' | 'top' | 'start' | 'end''bottom'시트가 나오는 가장자리.
modalbooleantrue배경을 깔고 포커스를 안에 가두며 페이지를 비활성으로 만듭니다.
dismissiblebooleantrue가장 작은 멈춤 위치 너머로 끌기, 배경, Escape로 닫힙니다.
backdropClassNamestring배경의 클래스. 인라인 스타일은 backdropStyle.
transitionTransitionspring시간 곡선 { duration, easing } 또는 스프링 { tempo: 'spring', spring }. 스프링은 끊겨도 속도를 이어갑니다.

그 밖의 props는 그려지는 요소로 전달되므로 className, style, 이벤트 핸들러를 평소처럼 쓸 수 있습니다.

웹과 React Native

웹의 모달 시트는 네이티브 dialog이고, 패널은 className으로 꾸미는 세로 flex 요소입니다.

React Native에서는 투명한 Modal로 그려지고 뒤로 가기 버튼으로 닫힙니다. 안쪽 ScrollView는 자기 제스처를 유지하므로 시트는 손잡이, 머리글 같은 고정 영역에서 끕니다.

이 컴포넌트를 쓰는 예제

검색

입력하면 문서를 검색합니다.