123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import {useEffect, useState} from 'react';
- /**
- * Hook to detect when a specific key is being pressed
- */
- const useKeyPress = (
- targetKey: string,
- target?: HTMLElement,
- preventDefault?: boolean
- ) => {
- const [keyPressed, setKeyPressed] = useState(false);
- const current = target ?? document.body;
- useEffect(() => {
- const downHandler = (event: KeyboardEvent) => {
- if (event.key === targetKey) {
- setKeyPressed(true);
- if (preventDefault) {
- event.preventDefault();
- }
- }
- };
- const upHandler = (event: KeyboardEvent) => {
- if (event.key === targetKey) {
- setKeyPressed(false);
- if (preventDefault) {
- event.preventDefault();
- }
- }
- };
- current.addEventListener('keydown', downHandler);
- current.addEventListener('keyup', upHandler);
- return () => {
- current.removeEventListener('keydown', downHandler);
- current.removeEventListener('keyup', upHandler);
- };
- }, [targetKey, current, preventDefault]);
- return keyPressed;
- };
- export default useKeyPress;
|