Menu Sheet
Swipeable Menu Sheet를 Stackflow와 함께 사용하는 방법을 안내합니다.
Swipeable Menu Sheet
Swipeable Menu Sheet 컴포넌트에 대해 자세히 알아봅니다.
Making a Swipeable Menu Sheet Activity
일반적인 경우 Swipeable Menu Sheet를 Activity로 만들어 사용하는 것을 권장합니다.
- Activity로 관리되므로, 하위 Activity보다 높고 상위 Activity보다는 낮은 z-index를 갖도록 관리하기 쉽습니다.
- 딥링킹이 가능합니다. (URL 접속으로 Swipeable Menu Sheet를 열 수 있습니다.)
- @stackflow/plugin-basic-ui
BottomSheet에서의 마이그레이션이 쉽습니다.
Usage
openprop에useActivity().isActive를 전달하여 Activity가 활성화될 때 Swipeable Menu Sheet가 열리도록 합니다.onOpenChange를 통해 Swipeable Menu Sheet가 닫힐 때pop()을 실행하여 Activity를 종료합니다. swipe 제스처로 닫는 경우에도onOpenChange가 호출되므로 Activity가 함께 종료됩니다.layerIndex={useActivityZIndexBase()}로 Swipeable Menu Sheet Activity의 z-index 기준점을 전달합니다.
Syncing Swipeable Menu Sheet State with a Step
Swipeable Menu Sheet를 Activity로 만들 수 없는 경우, Swipeable Menu Sheet가 표시된 상태를 Step으로 만들 수 있습니다.
- 현재 Activity를 유지하면서도, 뒤로 가기 버튼 등으로 Swipeable Menu Sheet를 닫을 수 있습니다.
SwipeableMenuSheetTrigger를 사용하여 Swipeable Menu Sheet를 열고 닫을 수 있습니다.
Activity로 만들지 않은 Swipeable Menu Sheet에서 다른 Activity를 push하는 경우, push하기 전 Swipeable Menu Sheet를 닫으세요.
Swipeable Menu Sheet를 닫을 수 없거나, Swipeable Menu Sheet를 연 Activity로 돌아왔을 때 Swipeable Menu Sheet가 열린 상태를 유지해야 하는 경우 Swipeable Menu Sheet를 Activity로 만들어 사용하는 것을 권장합니다.
Activity 간 유려한 트랜지션을 제공하기 위해 하위 AppScreen 요소 중 일부가 상위 AppScreen 요소보다 위에 위치합니다. 이 제약으로 인해, 열린 상태의 Swipeable Menu Sheet는 독립적인 Activity로 만들지 않는 경우 하위 Activity와 상위 Activity 사이에 위치시키는 것이 불가능합니다.
Usage
Portal을 사용하여 Swipeable Menu Sheet가 DOM 상 현재 Activity 밖에 렌더링되도록 합니다.openprop를 관리하고,onOpenChange핸들러를 통해 Step 상태와 동기화합니다.- 뒤로 가기 버튼 등을 통해 Activity 파라미터가 변경될 때 Swipeable Menu Sheet의
open상태를 동기화합니다. layerIndex={useActivityZIndexBase({ activityOffset: 1 })}로 현재 Activity보다 한 단계 높은 z-index 기준점을 전달합니다.
useStepOverlay
#2와 #3을 일반화하여 useStepOverlay를 사용하면 편리합니다. useStepOverlay 구현 예시는 코드를 참고하세요.
About useActivityZIndexBase
useActivityZIndexBase는 각 Activity의 z-index 기준점을 반환하는 훅입니다.
useActivity().zIndex * 5를 반환합니다.useActivity().zIndex는 현재 Activity가 enter된 Activity 중 몇 번째 Activity인지를 나타내는 값입니다.- AppScreen을 구성하는 요소들(layer, appbar, dim, edge)은
useActivityZIndexBase()값을 바탕으로 계산된 z-index를 갖습니다.
activityOffset옵션은 현재 Activity가 아닌 다음 Activity의 z-index 기준점을 사용하고 싶을 때 사용합니다.- 예를 들어,
useActivityZIndexBase({ activityOffset: 1 })는 다음 Activity의 z-index 기준점을 반환합니다. - 이는 Step 패턴에서 현재 Activity 위에 BottomSheet를 표시할 때 유용합니다.
- 두 훅 모두 현재 Activity가 enter된 Activity 중 몇 번째 Activity인지를 바탕으로 z-index 스타일링에 필요한 값을 반환하는 훅입니다.
- 두 훅이 반환하는 값은 같으나, @stackflow/plugin-basic-ui가 아닌, SEED 컴포넌트를 사용하는 경우 SEED가 관리하는
@seed-design/stackflow패키지의useActivityZIndexBase훅을 사용하는 것을 권장합니다. @stackflow/react-ui-core패키지의useActivityZIndexBase는activityOffset옵션을 제공하지 않습니다.@seed-design/[email protected]부터useActivityZIndexBase훅이 제공됩니다.
layerIndex를 useActivity().zIndex * 5 + n 형태로 지정하고 있었다면 useActivityZIndexBase() + n으로 변경할 수 있습니다. 변경 과정에서 + n이 필요한지 함께 검토해보세요.
Last updated on