Skip to content

Instantly share code, notes, and snippets.

@gaurangrshah
Last active December 14, 2019 21:47
Show Gist options
  • Save gaurangrshah/4095cec4d576505e10d5939783f46d3a to your computer and use it in GitHub Desktop.
Save gaurangrshah/4095cec4d576505e10d5939783f46d3a to your computer and use it in GitHub Desktop.
useKeyPress
import { useState, useEffect } from "react";
export default function(targetKey, element = window, cb) {
const [keyPressed, setKeyPressed] = useState(false);
function downHandler(e) {
const { key } = e;
if (key === targetKey) {
setKeyPressed(true);
cb && cb()
}
}
const upHandler = e => {
const { key } = e;
if (key === targetKey) {
setKeyPressed(false);
}
};
useEffect(() => {
let newElement = element.current ? element.current : element;
// console.log('newElement', newElement)
newElement.addEventListener("keydown", downHandler);
newElement.addEventListener("keyup", upHandler);
return () => {
newElement.removeEventListener("keydown", downHandler);
newElement.removeEventListener("keyup", upHandler);
};
});
return keyPressed;
}
/* usage: const upPressed = useKeyPress("ArrowDown", ref, cb) */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment