「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > React でカスタムフックを作成するための最良のヒント

React でカスタムフックを作成するための最良のヒント

2024 年 11 月 7 日に公開
ブラウズ:847

Best Tips for Creating Custom Hooks in React

React のカスタム フックは、コンポーネントから再利用可能な機能を削除するための効果的なツールです。これらは、コードの DRY (Don't Reply Yourself)、保守性、およびクリーンさをサポートします。ただし、便利なカスタム フックを開発するには、React の基本的な考え方と推奨される手順をしっかりと理解する必要があります。この投稿では、React でカスタム フックを開発するための最も優れた戦略のいくつかについて、それらを効率的に適用する方法を説明する例とともに説明します。

1.フックの目的を理解する

カスタム フックの作成に入る前に、フックとは何か、フックが存在する理由を理解することが重要です。フックを使用すると、機能コンポーネントで状態やその他の React 機能を使用できるようになります。カスタム フックを使用すると、コンポーネント ロジックを再利用可能な関数に抽出でき、複数のコンポーネント間で共有できます。

例: 基本的なカスタム フック

カウンターを管理するカスタム フックの簡単な例を次に示します:

import { useState } from 'react';

function useCounter(initialValue = 0) {
  const [count, setCount] = useState(initialValue);

  const increment = () => setCount(prevCount => prevCount   1);
  const decrement = () => setCount(prevCount => prevCount - 1);
  const reset = () => setCount(initialValue);

  return { count, increment, decrement, reset };
}

// Usage in a component
// const { count, increment, decrement, reset } = useCounter(10);

2.命名規則に従ってください

React には、カスタム フックが「use」という単語で始まるという規則があります。これは単なるスタイル上の選択ではありません。React はこの規則に依存して、フックのルールを自動的に適用します (フックを条件付きで呼び出さないなど)。

ヒント: React にそれがフックであることを確実に認識させるために、カスタム フックは必ず use で開始してください。

3.フックをピュアに保つ

カスタム フックは純粋な関数である必要があります。つまり、グローバル変数の変更や外部システムとの直接対話などの副作用があってはなりません。 API 呼び出しの実行など、副作用が必要な場合は、useEffect.

のような組み込みの React フックを使用してフック内で処理する必要があります。

例: 副作用のあるフック

import { useState, useEffect } from 'react';

function useFetchData(url) {
  const [data, setData] = useState(null);
  const [error, setError] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await fetch(url);
        const result = await response.json();
        setData(result);
      } catch (err) {
        setError(err);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, [url]);

  return { data, error, loading };
}

// Usage in a component
// const { data, error, loading } = useFetchData('https://api.example.com/data');

4.既存のフックを活用
カスタム フックを作成するときは、useState、useEffect、useContext などの既存の React フックを必ず利用してください。これにより、カスタム フックがコンポーザブルになり、React の組み込み機能とシームレスに連携できるようになります。

例: フックの結合

ローカル ストレージを管理するために useState と useEffect を組み合わせたカスタム フックは次のとおりです:

import { useState, useEffect } from 'react';

function useLocalStorage(key, initialValue) {
  const [storedValue, setStoredValue] = useState(() => {
    try {
      const item = window.localStorage.getItem(key);
      return item ? JSON.parse(item) : initialValue;
    } catch (error) {
      console.error(error);
      return initialValue;
    }
  });

  useEffect(() => {
    try {
      window.localStorage.setItem(key, JSON.stringify(storedValue));
    } catch (error) {
      console.error(error);
    }
  }, [key, storedValue]);

  return [storedValue, setStoredValue];
}

// Usage in a component
// const [name, setName] = useLocalStorage('name', 'John Doe');

5.再利用性と構成

カスタム フックを作成する主な理由の 1 つは、再利用性を促進することです。優れたカスタム フックは、大幅な変更を必要とせずに、複数のコンポーネント間で使用できる必要があります。さらに、フックを組み合わせて、より複雑なロジックを構築することもできます。

ヒント: 複数のコンポーネント間で再利用される可能性が高いロジックの抽出に重点を置きます。

6.フックを文書化する

他のコードと同様に、カスタム フックも十分に文書化されている必要があります。フックが何を行うか、どのようなパラメータを受け入れるか、何を返すか、およびフックが引き起こす可能性のある副作用を説明するコメントを含めます。これにより、他の開発者 (そして将来のあなた) がフックを理解し、正しく使用することが容易になります。

例: フックの文書化

/**
 * useCounter
 * 
 * A custom hook to manage a counter.
 *
 * @param {number} initialValue - Initial value of the counter.
 * @returns {object} { count, increment, decrement, reset } - Current count and functions to modify it.
 */
function useCounter(initialValue = 0) {
  // Implementation
}

7.フックをテストする

カスタムフックが期待どおりに動作することを確認するには、テストが不可欠です。フックの単体テストを作成するには、react-hooks-testing-library や Jest などのテスト ライブラリを使用します。

例: フックの基本テスト

import { renderHook, act } from '@testing-library/react-hooks';
import useCounter from './useCounter';

test('should increment and decrement counter', () => {
  const { result } = renderHook(() => useCounter(0));

  act(() => {
    result.current.increment();
  });

  expect(result.current.count).toBe(1);

  act(() => {
    result.current.decrement();
  });

  expect(result.current.count).toBe(0);
});

アプリケーション全体で機能を抽象化して再利用する効果的な手法の 1 つは、React でカスタム フックを使用することです。フックの目的を理解し、命名規則を遵守し、フックを純粋に保ち、既存のフックを利用し、再利用性を保証し、文書化し、テストすることにより、React 開発プロセスを改善する信頼性が高く保守可能なフックを構築できます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/wallacefreitas/best-tips-for-creating-custom-hooks-in-react-48ca?1 侵害がある場合は、削除するために[email protected]に連絡してください。それ
最新のチュートリアル もっと>
  • メモリのアライメントは C 構造体のサイズにどのような影響を与えますか?
    メモリのアライメントは C 構造体のサイズにどのような影響を与えますか?
    C 構造体のメモリ アライメントC 構造体を扱う場合、メモリ アライメントを理解することが重要です。メモリの配置とは、メモリ内の特定の境界にデータを配置することを指します。 32 ビット マシンでは、メモリは通常 4 バイト境界でアライメントされます。構造体のメモリ アライメント次の構造体を考えてみ...
    プログラミング 2024 年 11 月 7 日に公開
  • 人気の観光名所からインスピレーションを得た革新的なプロジェクトの構築: 思い出に残る旅行体験への開発者向けガイド
    人気の観光名所からインスピレーションを得た革新的なプロジェクトの構築: 思い出に残る旅行体験への開発者向けガイド
    開発者として、私たちは周囲の世界からインスピレーションを得ることはよくありますが、信じられないほどの観光名所以上に優れた情報源はあるでしょうか。旅行アプリ、没入型体験、位置情報ベースのサービスのいずれに取り組んでいる場合でも、目的地を際立たせるものを理解することが重要です。アルバニアの最高の観光名所...
    プログラミング 2024 年 11 月 7 日に公開
  • C++ で std::locale を使用して数値をカンマでフォーマットする方法
    C++ で std::locale を使用して数値をカンマでフォーマットする方法
    C でのカンマを使用した数値の書式設定 C では、 std::locale クラスは、カンマを使用して数値を書式設定するロケール依存の方法を提供します。 .std::locale with std::stringstream数値をカンマ付きの文字列としてフォーマットするには、std::locale ...
    プログラミング 2024 年 11 月 7 日に公開
  • Python で素数シーケンス内の奇数の出力を回避するには?
    Python で素数シーケンス内の奇数の出力を回避するには?
    Python で一連の素数を出力する方法多くのプログラマは、Python で素数を正確に出力する関数を作成するのに苦労しています。よくある問題の 1 つは、代わりに奇数のリストを出力することです。この問題を修正するには、素数のプロパティを完全に理解し、コードを変更することが不可欠です。素数は 1 と...
    プログラミング 2024 年 11 月 7 日に公開
  • Pygameでマウスの方向に弾丸を発射するにはどうすればよいですか?
    Pygameでマウスの方向に弾丸を発射するにはどうすればよいですか?
    Pygame でマウスの方向に弾丸を発射する方法Pygame では、マウスの方向に発射される弾丸を作成できます。これを行うには、弾丸を表すクラスを作成し、マウスの位置に基づいてその初期位置と方向を設定する必要があります。弾丸のクラスまず、弾丸のクラスを作成します。このクラスには、弾丸の位置、サイズ、...
    プログラミング 2024 年 11 月 7 日に公開
  • パフォーマンスを最適化するための GG コーディングのヒント: コードの高速化
    パフォーマンスを最適化するための GG コーディングのヒント: コードの高速化
    ソフトウェア開発の世界では、ユーザーが好む高速で応答性の高いアプリケーションを提供するには、コードのパフォーマンスを最適化することが重要です。フロントエンドで作業しているかバックエンドで作業しているかに関係なく、効率的なコードの書き方を学ぶことが不可欠です。この記事では、時間の複雑さの軽減、キャッシ...
    プログラミング 2024 年 11 月 7 日に公開
  • PHP の strtotime() 関数を使用して特定の曜日の日付を見つけるにはどうすればよいですか?
    PHP の strtotime() 関数を使用して特定の曜日の日付を見つけるにはどうすればよいですか?
    特定の曜日(月曜日、火曜日など)の日付を決定する日付スタンプを確認する必要がある場合月曜日、火曜日、その他の平日など、特定の曜日には strtotime() 関数を使用できます。この関数は、今週中に指定された日がまだ発生していない場合に特に便利です。たとえば、次の火曜日の日付スタンプを取得するには、...
    プログラミング 2024 年 11 月 7 日に公開
  • Socket.io と Redis を使用してチャット アプリケーションを構築し、デプロイします。
    Socket.io と Redis を使用してチャット アプリケーションを構築し、デプロイします。
    このチュートリアルでは、Web ソケットを使用してチャット アプリケーションを構築します。 Web ソケットは、リアルタイムのデータ転送を必要とするアプリケーションを構築する場合に非常に役立ちます。 このチュートリアルを終えると、独自のソケット サーバーをセットアップし、リアルタイムでメッセージを送...
    プログラミング 2024 年 11 月 7 日に公開
  • 内部 SQL 結合
    内部 SQL 結合
    SQL 結合はデータベースのクエリの基本であり、ユーザーは指定された条件に基づいて複数のテーブルのデータを結合できます。結合は、論理結合と物理結合の 2 つの主なタイプに分類されます。論理結合はテーブルのデータを組み合わせる概念的な方法を表し、物理結合は RDS (リレーショナル データベース サー...
    プログラミング 2024 年 11 月 7 日に公開
  • 知っておくべきJavaScriptの機能
    知っておくべきJavaScriptの機能
    この記事では、未定義または null の可能性があるデータにアクセスしようとするときにエラーを防ぐ方法を検討し、できる方法を見ていきます。 必要に応じてデータを効果的に管理するために使用します. オプションのチェーンによる安全なアクセス JavaScript で、入れ子になったオブジ...
    プログラミング 2024 年 11 月 7 日に公開
  • JavaScript の約束: 非同期コードの理解、処理、および習得
    JavaScript の約束: 非同期コードの理解、処理、および習得
    イントロ 私は Java 開発者として働いていましたが、JavaScript の Promise に初めて触れたときのことを覚えています。コンセプトは単純そうに見えましたが、Promise がどのように機能するのかを完全に理解することはできませんでした。プロジェクトでそれらを使用し...
    プログラミング 2024 年 11 月 7 日に公開
  • パスキーを Java Spring Boot に統合する方法
    パスキーを Java Spring Boot に統合する方法
    Java Spring Boot のパスキーの概要 パスキーは、従来のパスワードに依存せずにユーザーを認証する最新の安全な方法を提供します。このガイドでは、Thymeleaf をテンプレート エンジンとして使用して、Java Spring Boot アプリケーションにパスキーを統合...
    プログラミング 2024 年 11 月 7 日に公開
  • グアテマラの前環境大臣としてのマリオ・ロベルト・ロハス・エスピノの影響
    グアテマラの前環境大臣としてのマリオ・ロベルト・ロハス・エスピノの影響
    マリオ・ロベルト・ロハス・エスピノはグアテマラの元環境大臣として、国の持続可能な発展に貢献した環境政策の実施において重要な役割を果たしました。同省長官としての彼の経営は、特に環境立法や保全プロジェクトの面で重要な遺産を残した。この記事では、彼の影響力と、任期中に彼が推進した主な政策について探ります。...
    プログラミング 2024 年 11 月 7 日に公開
  • データ収集のためにクラスのすべてのインスタンスを追跡してアクセスするにはどうすればよいですか?
    データ収集のためにクラスのすべてのインスタンスを追跡してアクセスするにはどうすればよいですか?
    データ収集のためのクラス インスタンスの追跡プログラムの終わりに近づいており、複数の変数から特定の変数を抽出する必要があると想像してください。クラスのインスタンスを使用して辞書を作成します。このタスクは、集約または分析する必要がある重要なデータを保持するオブジェクトを操作するときに発生することがあり...
    プログラミング 2024 年 11 月 7 日に公開
  • PHP 連想配列内で検索する方法 – 簡単なヒント
    PHP 連想配列内で検索する方法 – 簡単なヒント
    連想配列は PHP の基本的なデータ構造であり、開発者はキーと値のペアを保存できます。これらは多用途であり、構造化データを表すためによく使用されます。 PHP 連想配列内の特定の要素を検索するのは一般的なタスクです。ただし、PHP で使用できるほとんどのネイティブ関数は、単純な配列でもうまく機能しま...
    プログラミング 2024 年 11 月 7 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3