レスポンスフック: useKeydown ()


キーを押すと、指定した関数を呼び出します.
escapeが押された場合、onclose ()をコールします.
import useKeyDown from "hooks/useKeyDown";
...
const SomeComponent = () => {
  useKeyDown("Escape", onClose);
...
実際のフック
import { useEffect } from "react";

// https://stackoverflow.com/questions/37440408
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values
// Example: useKeyDown("Escape", onClose);
const useKeyDown = (key: string, onKeyDown: () => void) => {
  useEffect(() => {
    const handleKeyDown = (event: KeyboardEvent) => {
      if (event.key === key) onKeyDown();
      // or: event.Code === keyCode
    };

    window.addEventListener("keydown", handleKeyDown);

    return () => {
      window.removeEventListener("keydown", handleKeyDown);
    };
  }, []); // eslint-disable-line react-hooks/exhaustive-deps
};

export default useKeyDown;