@react-hook/event

A React hook for managing event listeners, e.g. removing events when a component unmounts.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@react-hook/event
1,253341.2.6a year ago3 years agoMinified + gzip package size for @react-hook/event in KB

Readme


useEvent()

<img alt="Bundlephobia" src="https://img.shields.io/bundlephobia/minzip/@react-hook/event?style=for-the-badge&labelColor=24292e">
<img alt="Types" src="https://img.shields.io/npm/types/@react-hook/event?style=for-the-badge&labelColor=24292e">
<img alt="Build status" src="https://img.shields.io/travis/com/jaredLunde/react-hook?style=for-the-badge&labelColor=24292e">
<img alt="NPM Version" src="https://img.shields.io/npm/v/@react-hook/event?style=for-the-badge&labelColor=24292e">
<img alt="MIT License" src="https://img.shields.io/npm/l/@react-hook/event?style=for-the-badge&labelColor=24292e">


npm i @react-hook/event


A React hook for adding events to HTML elements. This hook cleans up your listeners automatically when it unmounts. You won't have to worry about wrapping your listener in a useCallback() because this hook makes sure your most recent callback is always invoked.

Quick Start

```jsx harmony import as React from 'react' import useEvent from '@react-hook/event'
// Logs an event each time target.current is clicked const Component = () => { const target = useRef(null) useEvent(target, 'click', (event) => console.log(event)) return
}
// Logs an event each time the document is clicked const useLogDocumentClick = () => { useEvent(document, 'click', (event) => console.log(event)) }
// Logs an event each time the window is clicked const useLogWindowClick = () => { useEvent(window, 'click', (event) => console.log(event)) }
// Logs an event each time element#foo` is clicked const useLogElementClick = () => { useEvent(document.getElementById('foo'), 'click', (event) =>
console.log(event)
) }
## API

### useEvent(target, type, listener)

```ts
const useEvent = <
  // Also has Window, Document overloads
  T extends HTMLElement = HTMLElement,
  K extends keyof HTMLElementEventMap = keyof HTMLElementEventMap
>(
  target: React.RefObject<T> | T | Window | Document | null,
  type: K,
  listener: EventListener<K>,
  cleanup?: (...args: any[]) => any
)

| Argument | Type | Required? | Description | | -------- | ---------------------------------------------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | target | React.RefObject<T> | T | Window | Document | null | Yes | The React ref, window, or document to add the event listener to | | type | keyof EventMap | Yes | The type of event to listen for | | listener | (this: T, ev: EventMap[K]) => any | Yes | The callback invoked when the event type fires | | cleanup | (...args: any[]) => any | No | This callback will be invoked when the event unmounts. This is in addition to the automatic event listener cleanup that occurs. A common use case could be something like clearing a timeout. |

LICENSE

MIT