개요
@react-native-motion-kit/swipe-deck는 React Native용 고성능 Tinder 스타일
swipe deck 라이브러리입니다. 부드러운 card stack, like/pass 버튼, progress
기반 overlay, type-safe compound API가 필요한 앱에 맞춰져 있습니다.
핵심 모델
주요 API는 typed compound component family입니다.
createSwipeDeck<T>()가 item type에 맞는 deck family를 만듭니다.Root는 data, gesture state, motion option, action, event, layout을 소유합니다.Card는 bounded forward window 안에 mount된 item을 렌더링합니다.- Factory hook은 state, action, event, animated UI용 Reanimated shared value를 제공합니다.
Factory는 한 번 만들고 shared module에서 export하세요. 같은 factory의 Root 주변에서
그 factory hook을 사용해야 합니다.
이 라이브러리가 해결하는 것
- 전체 data set을 한 번에 렌더링하지 않습니다.
- Stable key를 통해 promoted card가 item identity를 유지합니다.
- Manual drag motion과 programmatic action motion을 따로 조정할 수 있습니다.
- Interaction shared value는 UI thread에서 업데이트되어 gesture frame마다 React rerender를 만들지 않습니다.
- Event는 swipe, undo, index change, end reached 같은 commit된 model 변화를 표현합니다.
핵심 개념
Bounded Forward Window
기본적으로 active index부터 최대 세 장을 mount합니다.
- current card
- next card
- next buffered card
이 방식은 dismissed card를 다시 채우지 않으면서도 stack의 연속성을 유지합니다.
visibleCardCount로 최대 budget을 조정할 수 있습니다.
Stable Item Key
getKey는 필수입니다. 같은 logical item은 swipe가 진행되어도 같은 key를 반환해야 하고,
서로 다른 item은 같은 key를 공유하지 않는 것이 좋습니다. Deck은 이 key를 각 mounted
card의 React identity로 사용합니다.
Commit Event와 Live Interaction
Commit된 model 변화에는 event hook을 사용하세요. Card가 dragging, dismissing, restoring 중인지에 따라 frame-synchronous visual feedback이 필요하면 interaction shared value를 사용하세요.
