# usePressTap
URL: /lynx/hooks/use-press-tap
Source: https://github.com/daangn/seed-design/blob/dev/docs/content/lynx/hooks/use-press-tap.mdx
Lynx 요소의 press/tap 인터랙션 상태를 관리하는 훅입니다.
사용 가능 버전: @seed-design/lynx-react@0.1.0
## Import
```ts
import { usePressTap } from "@seed-design/lynx-react";
```
`usePressTap`은 `@seed-design/lynx-react` 패키지에 포함되어 있습니다.
## Usage
### 기본 사용
```tsx
import { usePressTap } from "@seed-design/lynx-react";
function TappableCard() {
const { pressed, ...handlers } = usePressTap({
onTap: () => {
"background only";
console.log("tapped!");
},
});
return (
{pressed ? "Pressing..." : "Tap me"}
);
}
```
### Disabled 상태
```tsx
function DisabledButton({ disabled }: { disabled: boolean }) {
const { pressed, ...handlers } = usePressTap({
disabled,
onTap: () => {
"background only";
console.log("won't fire when disabled");
},
});
return Button;
}
```
### Main Thread 이벤트
```tsx
import { usePressTap } from "@seed-design/lynx-react";
function AnimatedButton() {
const mainThreadTap = () => {
"main thread";
// main thread에서 실행되는 애니메이션 로직
};
const { pressed, ...handlers } = usePressTap({
onTap: () => {
"background only";
console.log("tapped");
},
mainThreadOnTap: mainThreadTap,
});
return Animated;
}
```
## API
### Options
| Prop | Type | Default | Description |
| ----------------- | ------------ | ------- | ---------------------------------------------------- |
| `disabled` | `boolean` | `false` | `true`일 때 press 상태 변경과 tap 이벤트가 차단됩니다. |
| `onTap` | `() => void` | - | 탭 시 호출되는 콜백입니다. |
| `mainThreadOnTap` | `() => void` | - | Main thread에서 실행되는 탭 콜백입니다. `disabled` 시 바인딩되지 않습니다. |
### Return
| Property | Type | Description |
| --------------------- | --------------------------- | ----------------------------------------------------------------------- |
| `pressed` | `boolean` | 현재 press 상태입니다. |
| `bindtap` | `(e: TouchEvent) => void` | 탭 이벤트 핸들러입니다. |
| `bindtouchstart` | `(e: TouchEvent) => void` | 터치 시작 핸들러입니다. |
| `bindtouchend` | `(e: TouchEvent) => void` | 터치 종료 핸들러입니다. |
| `bindtouchcancel` | `(e: TouchEvent) => void` | 터치 취소 핸들러입니다. |
| `main-thread:bindtap` | `(() => void) \| undefined` | Main thread 탭 핸들러입니다. `disabled`이거나 `mainThreadOnTap`이 미제공이면 포함되지 않습니다. |
## CSS 스타일링 참고
SEED Lynx 컴포넌트는 `pressed` 상태를 recipe의 boolean variant로 전달하고, 생성된 className 조합으로 press 스타일을 표현합니다. Web처럼 `:active` pseudo-class나 `data-active` selector에 기대지 않습니다.
```tsx
const { pressed, ...pressHandlers } = usePressTap({ onTap });
const classNames = actionButton({ pressed });
```
## 웹 버전과의 차이
| 항목 | Lynx (`usePressTap`) | Web (`usePress` 등) |
| ----------- | -------------------------------------- | ---------------------------------- |
| 이벤트 모델 | `bindtap`, `bindtouchstart/end/cancel` | `onPointerDown/Up/Move`, `onClick` |
| Press 감지 | 터치 이벤트 기반 | 포인터 이벤트 기반 |
| Hover 지원 | 없음 (모바일 전용) | `isHovered` 상태 포함 |
| Focus 지원 | 없음 | `isFocused`, `isFocusVisible` 포함 |
| Main thread | `main-thread:bindtap` 지원 | 해당 없음 |
| CSS 연동 | 네이티브 `:active` 자동 적용 | `data-active` attribute selector |