@qtpy/use-event
Version:
1. [Параметры](#параметры) 2. [Пример использования](#пример-использования) 3. [Особенности](#особенности) 4. [Безопасность](#безопасность)
55 lines (40 loc) • 3.89 kB
Markdown
# `useEvent` - обработчик событий
## Содержание
1. [Параметры](#параметры)
2. [Пример использования](#пример-использования)
3. [Особенности](#особенности)
4. [Безопасность](#безопасность)
Хук `useEvent` регистрирует обработчик события при монтировании компонента и автоматически удаляет его при размонтировании или изменении зависимостей. Он также предоставляет функцию `removeListener`, которую можно вызвать вручную внутри обработчика.
## Параметры
| Параметр | Тип | Описание | |
| ---------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| `event` | `string` | Название события, например `"click"`, `"keydown"`, `"scroll"` и т.д. | |
| `listener` | `(event: Event, removeListener: () => void) => void` | Колбэк, вызываемый при срабатывании события. Получает объект события и функцию удаления. | |
| `options` | `boolean \| AddEventListenerOptions` | (Необязательно) Опции для `addEventListener`. | |
| `target` | \`EventTarget \| React.RefObject\<EventTarget | null>\` | (Необязательно) Цель, к которой привязать слушатель. По умолчанию — `window`. |
| `deps` | `React.DependencyList` | (Необязательно) Зависимости, при изменении которых перерегистрируется обработчик. | |
## Пример использования
```tsx
import React, { useRef } from 'react';
import useEvent from '@qtpy/use-event';
function App() {
const divRef = useRef<HTMLDivElement>(null);
useEvent(
'click',
(e, remove) => {
console.log('Clicked!', e);
// Можно вручную удалить обработчик:
// remove();
},
false,
divRef
);
return <div ref={divRef}>Нажми на меня</div>;
}
```
## Особенности
* Поддерживает как прямые DOM-объекты, так и `ref`-объекты.
* Автоматически удаляет обработчик при размонтировании.
* Предоставляет внутри слушателя возможность самостоятельно удалить обработчик вызовом `removeListener()`.
## Безопасность
Хук корректно обрабатывает случаи, когда `target` недоступен (например, `ref.current === null`), и не пытается регистрировать обработчик.