usePressTap

Lynx 요소의 press/tap 인터랙션 상태를 관리하는 훅입니다.

Import

import { usePressTap } from "@seed-design/lynx-react";

usePressTap@seed-design/lynx-react 패키지에 포함되어 있습니다.

Usage

기본 사용

import { usePressTap } from "@seed-design/lynx-react";

function TappableCard() {
  const { pressed, ...handlers } = usePressTap({
    onTap: () => {
      "background only";
      console.log("tapped!");
    },
  });

  return (
    <view {...handlers}>
      <text>{pressed ? "Pressing..." : "Tap me"}</text>
    </view>
  );
}

Disabled 상태

function DisabledButton({ disabled }: { disabled: boolean }) {
  const { pressed, ...handlers } = usePressTap({
    disabled,
    onTap: () => {
      "background only";
      console.log("won't fire when disabled");
    },
  });

  return <view {...handlers}><text>Button</text></view>;
}

Main Thread 이벤트

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 <view {...handlers}><text>Animated</text></view>;
}

API

Options

PropTypeDefaultDescription
disabledbooleanfalsetrue일 때 press 상태 변경과 tap 이벤트가 차단됩니다.
onTap() => void-탭 시 호출되는 콜백입니다.
mainThreadOnTap() => void-Main thread에서 실행되는 탭 콜백입니다. disabled 시 바인딩되지 않습니다.

Return

PropertyTypeDescription
pressedboolean현재 press 상태입니다.
bindtap(e: TouchEvent) => void탭 이벤트 핸들러입니다.
bindtouchstart(e: TouchEvent) => void터치 시작 핸들러입니다.
bindtouchend(e: TouchEvent) => void터치 종료 핸들러입니다.
bindtouchcancel(e: TouchEvent) => void터치 취소 핸들러입니다.
main-thread:bindtap(() => void) | undefinedMain thread 탭 핸들러입니다. disabled이거나 mainThreadOnTap이 미제공이면 포함되지 않습니다.

CSS 스타일링 참고

SEED Lynx 컴포넌트는 pressed 상태를 recipe의 boolean variant로 전달하고, 생성된 className 조합으로 press 스타일을 표현합니다. Web처럼 :active pseudo-class나 data-active selector에 기대지 않습니다.

const { pressed, ...pressHandlers } = usePressTap({ onTap });
const classNames = actionButton({ pressed });

웹 버전과의 차이

항목Lynx (usePressTap)Web (usePress 등)
이벤트 모델bindtap, bindtouchstart/end/cancelonPointerDown/Up/Move, onClick
Press 감지터치 이벤트 기반포인터 이벤트 기반
Hover 지원없음 (모바일 전용)isHovered 상태 포함
Focus 지원없음isFocused, isFocusVisible 포함
Main threadmain-thread:bindtap 지원해당 없음
CSS 연동네이티브 :active 자동 적용data-active attribute selector

Last updated on

On this page