use-click-outside
Detect click and touch events outside of specified element
Import
Source
Docs
Package
Usage
import React, { useState } from 'react';import { Paper, Button } from '@mantine/core';import { useClickOutside } from '@mantine/hooks';export function Demo() {const [opened, setOpened] = useState(false);const ref = useClickOutside(() => setOpened(false));return (<><Button onClick={() => setOpened(true)}>Open dropdown</Button>{opened && (<Paper elementRef={ref} shadow="sm"><span>Click outside to close</span></Paper>)}</>);}
API
Hook accepts 2 arguments:
handler
– function that will be called on outside clickevents
– optional list of events that indicate outside click
Hook returns React ref object that should be passed to element on which outside clicks should be captured.
import { useClickOutside } from '@mantine/hooks';function Example() {const handleClickOutside = () => console.log('Clicked outside of div');const ref = useClickOutside(handleClickOutside);return <div ref={ref} />;}
Change events
By default use-click-outside listens to mousedown
and touchstart
events,
you can change these events by passing an array of events as second argument:
import React, { useState } from 'react';import { Paper, Button } from '@mantine/core';import { useClickOutside } from '@mantine/hooks';export function Demo() {const [opened, setOpened] = useState(false);const ref = useClickOutside(() => setOpened(false), ['mouseup', 'touchend']);return (<><Button onClick={() => setOpened(true)}>Open dropdown</Button>{opened && (<Paper elementRef={ref} shadow="sm"><span>Click outside to close</span></Paper>)}</>);}
TypeScript
Definition
function useClickOutside<T extends HTMLElement = any>(handler: () => void,events: string[] = ['mousedown', 'touchstart']): React.MutableRefObject<T>;
Ref type
By default use-click-outside returns ref object with React.MutableRefObject<any>
type
as ref type does not matter in almost all cases. You can specify ref type by passing a type:
const ref = useClickOutside<HTMLDivElement>(onClickOutside);