پرتوپرتو

useOutsideClick

اجرای یک handler هنگام کلیک خارج از یک المان — برای بستن منو، popover و کارت‌ها

معرفی

هوک useOutsideClick هر بار که یک رویدادِ pointer خارج از المانِ ارجاع‌شده رخ دهد، handler را صدا می‌زند. برای بستنِ dropdown، popover، کارت‌های قابل‌بستن و مشابه.

به‌صورت پیش‌فرض به mousedown گوش می‌دهد (نه click) تا منو پیش از اجرای هر کلیکِ داخلی بسته شود — همان رفتارِ Radix.

چه زمانی استفاده کنیم

  • بستنِ یک منوی سفارشی یا popover با کلیکِ بیرون
  • رد کردنِ یک کارتِ انتخاب‌شده هنگام کلیک در جای دیگر

چه زمانی استفاده نکنیم

  • اگر از کامپوننت‌های مبتنی بر Radix (Dialog، Popover، DropdownMenu) استفاده می‌کنید — خودشان این رفتار را دارند

استفاده

import { useOutsideClick } from '@partodata/ui'

function Menu() {
  const [open, setOpen] = React.useState(false)
  const ref = React.useRef<HTMLDivElement>(null)

  useOutsideClick(ref, () => setOpen(false), { when: open })

  return (
    <div ref={ref}>
      <Button onClick={() => setOpen((o) => !o)}>منو</Button>
      {open && <div data-slot="menu"></div>}
    </div>
  )
}

پارامترها

پارامترنوعپیش‌فرضتوضیح
refRefObject<T | null>المانِ داخلی؛ کلیک روی آن یا فرزندانش نادیده گرفته می‌شود
handler(e: MouseEvent | TouchEvent) => voidهنگام کلیکِ بیرون صدا زده می‌شود
options.whenbooleantrueبا false گوش‌دادن متوقف می‌شود (مثلاً وقتی منو بسته است)
options.eventsArray<'mousedown' | 'click' | …>['mousedown','touchstart']رویدادهایی که گوش داده می‌شوند

مقدار بازگشتی

این هوک چیزی برنمی‌گرداند (void).


هوک‌های مرتبط