React useKeyPress Hook

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 특정 키의 눌림 상태 변화를 감지하는 useKeyPress라는 사용자 정의 React 훅을 만드는 방법을 배웁니다. 이 훅은 사용자가 특정 키를 누르고 있는지 감지해야 하는 시나리오에서 유용합니다. useStateuseEffect 훅을 사용하여 각각 상태와 이벤트 리스너를 처리합니다.

React useKeyPress Hook

index.htmlscript.js는 이미 VM 에 제공되었습니다. 일반적으로 script.jsstyle.css에만 코드를 추가하면 됩니다.

이 함수는 특정 키의 눌림 상태 변화를 감지합니다. 사용 방법은 다음과 같습니다.

  • 대상 키를 인수로 사용하여 useKeyPress()를 호출합니다.
  • useKeyPress()는 현재 키가 눌려져 있는지 여부를 나타내는 부울 값을 반환합니다.
  • 이 함수는 useState() 훅을 사용하여 주어진 키의 눌림 상태를 저장하는 상태 변수를 생성합니다.
  • 키 다운 또는 키 업 시 상태 변수를 업데이트하는 두 개의 핸들러 함수를 정의합니다.
  • useEffect() 훅과 EventTarget.addEventListener()'keydown''keyup' 이벤트를 처리하는 데 사용됩니다.
  • 마지막으로, 컴포넌트가 언마운트된 후 정리를 수행하기 위해 EventTarget.removeEventListener()가 사용됩니다.
const useKeyPress = (targetKey) => {
  const [isKeyPressed, setKeyPressed] = React.useState(false);

  const handleKeyDown = ({ key }) => {
    if (key === targetKey) setKeyPressed(true);
  };

  const handleKeyUp = ({ key }) => {
    if (key === targetKey) setKeyPressed(false);
  };

  React.useEffect(() => {
    window.addEventListener("keydown", handleKeyDown);
    window.addEventListener("keyup", handleKeyUp);

    return () => {
      window.removeEventListener("keydown", handleKeyDown);
      window.removeEventListener("keyup", handleKeyUp);
    };
  }, [targetKey]);

  return isKeyPressed;
};

다음은 React 컴포넌트에서 useKeyPress()를 사용하는 예입니다.

const MyApp = () => {
  const isWKeyPressed = useKeyPress("w");

  return <p>The "w" key is {!isWKeyPressed ? "not " : ""}pressed!</p>;
};

ReactDOM.render(<MyApp />, document.getElementById("root"));

오른쪽 하단 모서리에 있는 'Go Live'를 클릭하여 포트 8080 에서 웹 서비스를 실행하십시오. 그런 다음 Web 8080 탭을 새로 고쳐 웹 페이지를 미리 볼 수 있습니다.

요약

축하합니다! React useKeyPress Hook 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.