カスタム React Hook を使った応答型ナビゲーション

JavaScriptJavaScriptIntermediate
今すぐ練習

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

はじめに

このプロジェクトでは、useWindowSize と呼ばれるカスタム React Hook を作成して、現在のウィンドウサイズを取得し、それを使って Web アプリケーションのナビゲーションバーを条件付きでレンダリングする方法を学びます。

👀 プレビュー

project preview

🎯 タスク

このプロジェクトでは、以下のことを学びます。

  • useWindowSize カスタム Hook を実装して、現在のウィンドウサイズを取得する
  • App コンポーネントで useWindowSize Hook を使って、ウィンドウ幅に基づいてナビゲーションバーを更新する

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • 再利用可能な機能をカプセル化するためのカスタム React Hook を作成する
  • useStateuseEffect Hook を使って状態と副作用を管理する
  • 現在のウィンドウサイズに基づいてコンポーネントを条件付きでレンダリングする

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react/FundamentalsGroup -.-> react/event_handling("Handling Events") react/FundamentalsGroup -.-> react/conditional_render("Conditional Rendering") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("Higher-Order Functions") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") javascript/DOMManipulationGroup -.-> javascript/dom_manip("DOM Manipulation") javascript/DOMManipulationGroup -.-> javascript/event_handle("Event Handling") subgraph Lab Skills react/event_handling -.-> lab-300136{{"カスタム React Hook を使った応答型ナビゲーション"}} react/conditional_render -.-> lab-300136{{"カスタム React Hook を使った応答型ナビゲーション"}} react/hooks -.-> lab-300136{{"カスタム React Hook を使った応答型ナビゲーション"}} javascript/higher_funcs -.-> lab-300136{{"カスタム React Hook を使った応答型ナビゲーション"}} react/use_state_reducer -.-> lab-300136{{"カスタム React Hook を使った応答型ナビゲーション"}} javascript/dom_manip -.-> lab-300136{{"カスタム React Hook を使った応答型ナビゲーション"}} javascript/event_handle -.-> lab-300136{{"カスタム React Hook を使った応答型ナビゲーション"}} end

useWindowSize Hook を実装する

始めるには、エディタを開きます。エディタから以下のファイルが見えます。

├── package-lock.json
├── package.json
├── public
│   ├── index.html
│   └── robots.txt
└── src
    ├── App.css
    ├── App.js
    ├── hooks
    │   └── useWindowSize.js
    ├── index.css
    ├── index.js
    ├── reportWebVitals.js
    └── setupTests.js

このステップでは、現在のウィンドウサイズを取得するための useWindowSize カスタム Hook をどのように実装するか学びます。

  1. src/Hooks ディレクトリにある useWindowSize.js ファイルを開きます。
  2. このファイルで必要な依存関係をインポートします。
import { useEffect, useState } from "react";
  1. useWindowSize 関数を定義します。
import { useEffect, useState } from "react";

export const useWindowSize = () => {
  const [windowSize, setWindowSize] = useState({
    width: window.innerWidth,
    height: window.innerHeight
  });

  const changeWindowSize = () => {
    setWindowSize({ width: window.innerWidth, height: window.innerHeight });
  };

  useEffect(() => {
    window.addEventListener("resize", changeWindowSize);

    return () => {
      window.removeEventListener("resize", changeWindowSize);
    };
  }, []);

  return windowSize;
};

解説:

  • useWindowSize 関数は、現在のウィンドウ幅と高さを含むオブジェクトを返します。
  • useState Hook は、状態変数 windowSize とそれを更新する関数 setWindowSize を作成するために使用されます。
  • changeWindowSize 関数は、ウィンドウがリサイズされたときに windowSize 状態を更新するために定義されています。
  • useEffect Hook は、resize イベントのイベントリスナーを追加し、コンポーネントがアンマウントされたときにそれを削除するために使用されます。
  • windowSize オブジェクトは useWindowSize 関数から返されます。

アプリケーションをテストする

  1. useWindowSize.js ファイルを保存します。
  2. ターミナルで npm install コマンドを使用して依存関係をダウンロードし、依存関係のダウンロードが完了するまで待ってから、npm start コマンドを使用してプロジェクトを起動します。
  3. プロジェクトが正常に起動したら、「Web 8080」をクリックしてブラウザでプレビューします。
  4. その効果は、ユーザーがウィンドウをリサイズすると、下部のコンテンツにウィンドウ幅が表示され、上部のナビゲーションバーは小さな画面ではサブメニューを2つ非表示にし、大きな画面では3つのメニューを表示することです。
window resize navigation demo

おめでとうございます! あなたは正常に useWindowSize Hook を実装し、App コンポーネントで使用して、ウィンドウサイズに基づいてナビゲーションバーを更新しました。

✨ 解答を確認して練習

まとめ

おめでとうございます! このプロジェクトを完了しました。あなたは実験技術を向上させるために、LabExでさらに多くの実験を行うことができます。