React useKeyPress フック

ReactReactBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、特定のキーの押下状態の変化を監視するカスタム React フック useKeyPress を作成する方法を学びます。このフックは、ユーザーが特定のキーを押しているかどうかを検出する必要があるシナリオで役立ちます。それぞれの状態とイベントリスナーを処理するために、useStateuseEffect フックを使用します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/conditional_render("Conditional Rendering") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38392{{"React useKeyPress フック"}} react/conditional_render -.-> lab-38392{{"React useKeyPress フック"}} react/hooks -.-> lab-38392{{"React useKeyPress フック"}} react/use_state_reducer -.-> lab-38392{{"React useKeyPress フック"}} end

React useKeyPress フック

VM には既に index.htmlscript.js が用意されています。一般的には、script.jsstyle.css にのみコードを追加すればよいです。

この関数は、特定のキーの押下状態の変化を監視します。これを使用するには:

  • 対象のキーを引数として useKeyPress() を呼び出します。
  • useKeyPress() は、現在キーが押されているかどうかを示すブール値を返します。
  • この関数は useState() フックを使用して、特定のキーの押下状態を保持する状態変数を作成します。
  • キーが押されたときまたは離されたときに状態変数を更新する 2 つのハンドラ関数を定義します。
  • 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 フックの実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を練習できます。