useBottomSheet
useBottomSheet 훅은 화면 하단에서 올라오는 바텀시트를 쉽게 제어할 수 있게 해주는 유틸리티 훅이에요. 이 훅을 사용하면 바텀시트의 열림과 닫힘 상태를 제어하고, 콘텐츠 표시와 사용자 상호작용을 효율적으로 처리할 수 있어요. 이를 통해 반복적인 코드를 줄이고, 바텀시트를 일관되게 구현할 수 있어요.
사용 예시
기본 바텀시트 표시하기
open 메서드를 사용하여 기본적인 바텀시트를 표시할 수 있어요.
header속성으로 제목을,children으로 내용을 전달할 수 있어요.closeOnDimmerClick속성을 사용해 배경 클릭 시 바텀시트가 닫히는 동작을 제어할 수 있어요. 기본값은true예요.
단일 버튼 바텀시트
openOneButtonSheet 메서드를 사용하면 하나의 버튼이 있는 바텀시트를 표시할 수 있어요.
button속성으로 버튼의 텍스트나 커스텀 버튼을 설정할 수 있어요. 문자열을 전달하면 기본 버튼이 생성돼요.closeOnButtonClick속성으로 버튼을 클릭했을 때 바텀시트가 닫히는 동작을 제어할 수 있어요.
이중 버튼 바텀시트
openTwoButtonSheet 메서드로 두 개의 버튼이 있는 바텀시트를 표시할 수 있어요.
leftButton과rightButton속성으로 각 버튼을 설정하고,closeOnLeftButtonClick과closeOnRightButtonClick으로 각 버튼을 클릭할 때의 닫힘 동작을 제어할 수 있어요.
비동기 작업 처리하기
openAsyncTwoButtonSheet 메서드를 사용하면 버튼을 클릭할 때 버튼에 로딩 중임이 표현되고, 조건이 만족할 때까지 바텀시트를 표시할 수 있어요. 이 방법은 작업이 끝날 때까지 바텀시트를 유지해야 할 때 유용해요.
onLeftButtonClick과onRightButtonClick속성에 비동기 함수를 전달하면, 작업이 완료될 때까지 자동으로 로딩 상태가 처리돼요.
인터페이스
BottomSheetOptions
| 속성 | 기본값 | 타입 |
|---|---|---|
| children* | - | React.ReactNode`BottomSheet` 컴포넌트의 내용이에요. |
| header | - | React.ReactNode`BottomSheet` 컴포넌트의 헤더에 표시될 제목이에요. |
| closeOnDimmerClick | true | false|true`BottomSheet` 컴포넌트 외부의 어두운 배경을 클릭했을 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| onEntered | - | () => void`BottomSheet` 컴포넌트가 열린 후 실행될 콜백 함수에요. |
| onExited | - | () => void`BottomSheet` 컴포넌트가 닫힌 후 실행될 콜백 함수에요. |
| UNSAFE_disableFocusLock | - | false|true`BottomSheet` 컴포넌트가 열렸을 때 `BottomSheet` 컴포넌트 외부 영역에서: - 키보드 포커스가 `BottomSheet` 컴포넌트 내부로 제한되지 않도록 하고 - 스크린 리더가 `BottomSheet` 컴포넌트 외부 콘텐츠를 읽을 수 있도록 해요. 이 속성을 사용하면 접근성이 제한될 수 있으므로 불가피한 경우에만 사용해주세요. |
| UNSAFE_ignoreDimmerClick | - | false|true`BottomSheet` 컴포넌트 외부의 어두운 배경을 클릭해도 onClose가 호출되지 않게 해요. **주의: `BottomSheet` 컴포넌트 외부 영역 클릭 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** |
| UNSAFE_ignoreBackEvent | - | false|true앱에서 제공하는 뒤로가기 이벤트를 무시할지 설정해요. true로 설정하면 뒤로가기 동작이 발생해도 `BottomSheet` 컴포넌트가 닫히지 않아요. **주의: 뒤로가기 동작 발생 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** 추후 이 api가 deprecated 될 수 있으므로, 취소 액션을 구현하는 것이 기술적으로 어려운 상황에서만 이 속성을 사용해 주세요. |
OneButtonOptions
| 속성 | 기본값 | 타입 |
|---|---|---|
| children* | - | React.ReactNode`BottomSheet` 컴포넌트의 내용이에요. |
| header | - | React.ReactNode`BottomSheet` 컴포넌트의 헤더에 표시될 제목이에요. |
| closeOnDimmerClick | true | false|true배경을 클릭했을 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| onEntered | - | () => void`BottomSheet` 컴포넌트가 열린 후 실행될 콜백 함수에요. |
| onExited | - | () => void`BottomSheet` 컴포넌트가 닫힌 후 실행될 콜백 함수에요. |
| topAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 상단에 표시될 요소에요. |
| bottomAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 하단에 표시될 요소에요. |
| button | '확인' | string | React.ReactElement<any, string | React.JSXElementConstructor<any>>`BottomSheet` 컴포넌트의 버튼이에요. 버튼의 텍스트나 커스텀 버튼을 설정할 수 있어요. |
| closeOnButtonClick | true | false|true버튼을 클릭할 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| UNSAFE_disableFocusLock | - | false|true`BottomSheet` 컴포넌트가 열렸을 때 `BottomSheet` 컴포넌트 외부 영역에서: - 키보드 포커스가 `BottomSheet` 컴포넌트 내부로 제한되지 않도록 하고 - 스크린 리더가 `BottomSheet` 컴포넌트 외부 콘텐츠를 읽을 수 있도록 해요. 이 속성을 사용하면 접근성이 제한될 수 있으므로 불가피한 경우에만 사용해주세요. |
| UNSAFE_ignoreDimmerClick | - | false|true`BottomSheet` 컴포넌트 외부의 어두운 배경을 클릭해도 onClose가 호출되지 않게 해요. **주의: `BottomSheet` 컴포넌트 외부 영역 클릭 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** |
| UNSAFE_ignoreBackEvent | - | false|true앱에서 제공하는 뒤로가기 이벤트를 무시할지 설정해요. true로 설정하면 뒤로가기 동작이 발생해도 `BottomSheet` 컴포넌트가 닫히지 않아요. **주의: 뒤로가기 동작 발생 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** 추후 이 api가 deprecated 될 수 있으므로, 취소 액션을 구현하는 것이 기술적으로 어려운 상황에서만 이 속성을 사용해 주세요. |
AsyncOneButtonOptions
| 속성 | 기본값 | 타입 |
|---|---|---|
| children* | - | React.ReactNode`BottomSheet` 컴포넌트의 내용이에요. |
| header | - | React.ReactNode`BottomSheet` 컴포넌트의 헤더에 표시될 제목이에요. |
| closeOnDimmerClick | true | false|true배경을 클릭했을 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| onEntered | - | () => void`BottomSheet` 컴포넌트가 열린 후 실행될 콜백 함수에요. |
| onExited | - | () => void`BottomSheet` 컴포넌트가 닫힌 후 실행될 콜백 함수에요. |
| topAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 상단에 표시될 요소에요. |
| bottomAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 하단에 표시될 요소에요. |
| button | '확인' | string | React.ReactElement<any, string | React.JSXElementConstructor<any>>`BottomSheet` 컴포넌트의 버튼이에요. 버튼의 텍스트나 커스텀 버튼을 설정할 수 있어요. |
| onClick | - | () => Promise<void>버튼을 클릭할 때 실행될 비동기 함수에요. |
| loadingPropName | 'loading' | string버튼의 로딩 상태를 나타내는 prop의 이름이에요. |
| UNSAFE_disableFocusLock | - | false|true`BottomSheet` 컴포넌트가 열렸을 때 `BottomSheet` 컴포넌트 외부 영역에서: - 키보드 포커스가 `BottomSheet` 컴포넌트 내부로 제한되지 않도록 하고 - 스크린 리더가 `BottomSheet` 컴포넌트 외부 콘텐츠를 읽을 수 있도록 해요. 이 속성을 사용하면 접근성이 제한될 수 있으므로 불가피한 경우에만 사용해주세요. |
| UNSAFE_ignoreDimmerClick | - | false|true`BottomSheet` 컴포넌트 외부의 어두운 배경을 클릭해도 onClose가 호출되지 않게 해요. **주의: `BottomSheet` 컴포넌트 외부 영역 클릭 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** |
| UNSAFE_ignoreBackEvent | - | false|true앱에서 제공하는 뒤로가기 이벤트를 무시할지 설정해요. true로 설정하면 뒤로가기 동작이 발생해도 `BottomSheet` 컴포넌트가 닫히지 않아요. **주의: 뒤로가기 동작 발생 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** 추후 이 api가 deprecated 될 수 있으므로, 취소 액션을 구현하는 것이 기술적으로 어려운 상황에서만 이 속성을 사용해 주세요. |
TwoButtonOptions
| 속성 | 기본값 | 타입 |
|---|---|---|
| children* | - | React.ReactNode`BottomSheet` 컴포넌트의 내용이에요. |
| header | - | React.ReactNode`BottomSheet` 컴포넌트의 헤더에 표시될 제목이에요. |
| closeOnDimmerClick | true | false|true배경을 클릭했을 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| onEntered | - | () => void`BottomSheet` 컴포넌트가 열린 후 실행될 콜백 함수에요. |
| onExited | - | () => void`BottomSheet` 컴포넌트가 닫힌 후 실행될 콜백 함수에요. |
| topAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 상단에 표시될 요소에요. |
| bottomAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 하단에 표시될 요소에요. |
| leftButton | '취소' | string | React.ReactElement<any, string | React.JSXElementConstructor<any>>`BottomSheet` 컴포넌트의 왼쪽 버튼이에요. 버튼의 텍스트나 커스텀 버튼을 설정할 수 있어요. |
| closeOnLeftButtonClick | true | false|true왼쪽 버튼을 클릭할 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| rightButton | '확인' | string | React.ReactElement<any, string | React.JSXElementConstructor<any>>오른쪽 버튼이에요. 버튼의 텍스트나 커스텀 버튼을 설정할 수 있어요. |
| closeOnRightButtonClick | true | false|true오른쪽 버튼을 클릭할 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| UNSAFE_disableFocusLock | - | false|true`BottomSheet` 컴포넌트가 열렸을 때 `BottomSheet` 컴포넌트 외부 영역에서: - 키보드 포커스가 `BottomSheet` 컴포넌트 내부로 제한되지 않도록 하고 - 스크린 리더가 `BottomSheet` 컴포넌트 외부 콘텐츠를 읽을 수 있도록 해요. 이 속성을 사용하면 접근성이 제한될 수 있으므로 불가피한 경우에만 사용해주세요. |
| UNSAFE_ignoreDimmerClick | - | false|true`BottomSheet` 컴포넌트 외부의 어두운 배경을 클릭해도 onClose가 호출되지 않게 해요. **주의: `BottomSheet` 컴포넌트 외부 영역 클릭 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** |
| UNSAFE_ignoreBackEvent | - | false|true앱에서 제공하는 뒤로가기 이벤트를 무시할지 설정해요. true로 설정하면 뒤로가기 동작이 발생해도 `BottomSheet` 컴포넌트가 닫히지 않아요. **주의: 뒤로가기 동작 발생 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** 추후 이 api가 deprecated 될 수 있으므로, 취소 액션을 구현하는 것이 기술적으로 어려운 상황에서만 이 속성을 사용해 주세요. |
AsyncTwoButtonOptions
| 속성 | 기본값 | 타입 |
|---|---|---|
| children* | - | React.ReactNode`BottomSheet` 컴포넌트의 내용이에요. |
| header | - | React.ReactNode`BottomSheet` 컴포넌트의 헤더에 표시될 제목이에요. |
| closeOnDimmerClick | true | false|true배경을 클릭했을 때 `BottomSheet` 컴포넌트가 닫힐지 여부를 설정해요. |
| onEntered | - | () => void`BottomSheet` 컴포넌트가 열린 후 실행될 콜백 함수에요. |
| onExited | - | () => void`BottomSheet` 컴포넌트가 닫힌 후 실행될 콜백 함수에요. |
| topAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 상단에 표시될 요소에요. |
| bottomAccessory | - | React.ReactNode`BottomSheet` 컴포넌트 하단에 표시될 요소에요. |
| leftButton | '취소' | string | React.ReactElement<any, string | React.JSXElementConstructor<any>>`BottomSheet` 컴포넌트의 왼쪽 버튼이에요. 버튼의 텍스트나 커스텀 버튼을 설정할 수 있어요. |
| onLeftButtonClick | - | () => Promise<void>왼쪽 버튼을 클릭할 때 실행될 비동기 함수에요. |
| leftButtonLoadingPropName | 'loading' | string왼쪽 버튼의 로딩 상태를 나타내는 prop의 이름이에요. |
| rightButton | '확인' | string | React.ReactElement<any, string | React.JSXElementConstructor<any>>`BottomSheet` 컴포넌트의 오른쪽 버튼이에요. 버튼의 텍스트나 커스텀 버튼을 설정할 수 있어요. |
| onRightButtonClick | - | () => Promise<void>오른쪽 버튼을 클릭할 때 실행될 비동기 함수에요. |
| rightButtonLoadingPropName | 'loading' | string오른쪽 버튼의 로딩 상태를 나타내는 prop의 이름이에요. |
| UNSAFE_disableFocusLock | - | false|true`BottomSheet` 컴포넌트가 열렸을 때 `BottomSheet` 컴포넌트 외부 영역에서: - 키보드 포커스가 `BottomSheet` 컴포넌트 내부로 제한되지 않도록 하고 - 스크린 리더가 `BottomSheet` 컴포넌트 외부 콘텐츠를 읽을 수 있도록 해요. 이 속성을 사용하면 접근성이 제한될 수 있으므로 불가피한 경우에만 사용해주세요. |
| UNSAFE_ignoreDimmerClick | - | false|true`BottomSheet` 컴포넌트 외부의 어두운 배경을 클릭해도 onClose가 호출되지 않게 해요. **주의: `BottomSheet` 컴포넌트 외부 영역 클릭 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** |
| UNSAFE_ignoreBackEvent | - | false|true앱에서 제공하는 뒤로가기 이벤트를 무시할지 설정해요. true로 설정하면 뒤로가기 동작이 발생해도 `BottomSheet` 컴포넌트가 닫히지 않아요. **주의: 뒤로가기 동작 발생 시 사용자의 액션을 취소하고 `BottomSheet` 컴포넌트가 닫히는 것이 권장되는 동작이에요.** 추후 이 api가 deprecated 될 수 있으므로, 취소 액션을 구현하는 것이 기술적으로 어려운 상황에서만 이 속성을 사용해 주세요. |