# Reaction Button URL: /lynx/components/reaction-button Source: https://github.com/daangn/seed-design/blob/dev/docs/content/lynx/components/reaction-button.mdx 사용자가 콘텐츠에 대한 반응을 표현할 수 있게 해주는 컴포넌트입니다. 좋아요, 관심있어요 등의 감정적 피드백을 간편하게 제공할 때 사용됩니다. Lynx Engine 최소 버전: 3.6 사용 가능 버전: @seed-design/lynx-react@0.6.0, @seed-design/lynx-css@0.10.0 ## Installation - npm: npm install @seed-design/lynx-react @seed-design/lynx-css - pnpm: pnpm add @seed-design/lynx-react @seed-design/lynx-css - yarn: yarn add @seed-design/lynx-react @seed-design/lynx-css - bun: bun add @seed-design/lynx-react @seed-design/lynx-css Lynx `ReactionButton`은 별도 `ui:reaction-button` snippet 없이 `@seed-design/lynx-react` 패키지에서 직접 제공합니다. ## Usage ## Preview ```tsx import "./styles"; import IconBellFill from "@karrotmarket/lynx-monochrome-icon/IconBellFill"; import { Count, PrefixIcon, ReactionButton, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( } /> 도움돼요 1 ); } ``` ## Props ## Examples ### Small ```tsx import "./styles"; import IconBellFill from "@karrotmarket/lynx-monochrome-icon/IconBellFill"; import { Count, PrefixIcon, ReactionButton, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( } /> 도움돼요 1 ); } ``` ### Xsmall ```tsx import "./styles"; import IconBellFill from "@karrotmarket/lynx-monochrome-icon/IconBellFill"; import { Count, PrefixIcon, ReactionButton, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( } /> 도움돼요 1 ); } ``` ### Disabled ```tsx import "./styles"; import IconBellFill from "@karrotmarket/lynx-monochrome-icon/IconBellFill"; import { PrefixIcon, ReactionButton, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( } /> 비활성 ); } ``` ### Loading ```tsx import "./styles"; import IconBellFill from "@karrotmarket/lynx-monochrome-icon/IconBellFill"; import { useState } from "@lynx-js/react"; import { PrefixIcon, ReactionButton, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); const [{ pressed, loading }, setState] = useState({ pressed: false, loading: false, }); function handleToggle() { "background only"; setState((previous) => ({ pressed: previous.pressed, loading: true })); setTimeout(() => { setState((previous) => ({ pressed: !previous.pressed, loading: false })); }, 2000); } return ( } /> 시간이 걸리는 토글 ); } ``` Loading 중에도 `bindtap`과 `onPressedChange`가 동작합니다. 이벤트를 막아야 한다면 `disabled`를 함께 사용하세요. ## 웹 버전과의 차이 Lynx `ReactionButton`은 React `ReactionButton`과 다음과 같은 차이가 있습니다. - **이벤트 핸들링**: `onClick` 대신 `bindtap`을 사용합니다. - **렌더링 요소**: HTML `