Skip to content

Instantly share code, notes, and snippets.

@eriksachse
Created November 9, 2021 09:31
Show Gist options
  • Save eriksachse/1acf2e6c8ec4c399a536dcb3af39e23c to your computer and use it in GitHub Desktop.
Save eriksachse/1acf2e6c8ec4c399a536dcb3af39e23c to your computer and use it in GitHub Desktop.

Revisions

  1. eriksachse created this gist Nov 9, 2021.
    27 changes: 27 additions & 0 deletions useKeyPress.jsx
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    function useKeyPress(targetKey) {
    // State for keeping track of whether key is pressed
    const [keyPressed, setKeyPressed] = useState<boolean>(false);
    // If pressed key is our target key then set to true
    function downHandler({ key }) {
    if (key === targetKey) {
    setKeyPressed(true);
    }
    }
    // If released key is our target key then set to false
    const upHandler = ({ key }) => {
    if (key === targetKey) {
    setKeyPressed(false);
    }
    };
    // Add event listeners
    useEffect(() => {
    window.addEventListener("keydown", downHandler);
    window.addEventListener("keyup", upHandler);
    // Remove event listeners on cleanup
    return () => {
    window.removeEventListener("keydown", downHandler);
    window.removeEventListener("keyup", upHandler);
    };
    }, []); // Empty array ensures that effect is only run on mount and unmount
    return keyPressed;
    }