Reactでカスタムフックを作成する方法を教えます

Reactでカスタムフックを作成する方法を教えます

1. カスタムフックとは何か

ロジックの再利用

簡単に言えば、カスタム フックを使用すると、特定のコンポーネント ロジックを再利用可能な関数に抽出できます。 カスタム フックは、 useから始まる他のフックを呼び出す JavaScript 関数です。

2. カスタムフックを使用しない場合

例1:ページ全体でユーザーのマウス移動の座標を取得する必要がある場合、フックコードを使用せずに次のように記述できます。

  const [位置、setPosition] = useState({
    x: 0,
    年: 0
  })
  使用効果(() => {
    定数移動 = (e) => {
      setPosition({ x: ex, y: ey })
    }
    document.addEventListener('mousemove', 移動)
    戻り値 () => {
      document.removeEventListener('mousemove', 移動)
    }
  }, [])
  戻る (
    <div>
      x:{位置.x}
      y:{位置.y}
    </div>
  )

例 2: ページにマウスを追従する画像がある場合、フック コードを使用せずに次のように記述することもできます。

const [位置、setPosition] = useState({
    x: 0,
    年: 0
  })
  使用効果(() => {
    定数移動 = (e) => {
      setPosition({ x: ex, y: ey })
    }
    document.addEventListener('mousemove', 移動)
    戻り値 () => {
      document.removeEventListener('mousemove', 移動)
    }
  }, [])
  戻る (
    <div>
      <画像
        画像
        スタイル={{
          位置: '絶対'、
          上: position.y,
          左: position.x、
        }}
        代替案=""
      />
    </div>
  )

明らかに、上記の 2 つの例ではプレゼンテーション効果が異なりますが、使用されるロジック コードはほぼ同じです。フックを使用してロジック コードを再利用できます。

3. カスタムフックを使用する

上記の2つの例から再利用可能なロジックコードを抽出し、useMousePositionという新しいファイルを作成します。

'react' から { useState, useEffect } をインポートします。
デフォルト関数 useMousePosition() をエクスポートします。
  const [位置、setPosition] = useState({
    x: 0,
    年: 0
  })
  使用効果(() => {
    定数移動 = (e) => {
      setPosition({ x: ex, y: ey })
    }
    document.addEventListener('mousemove', 移動)
    戻り値 () => {
      document.removeEventListener('mousemove', 移動)
    }
  }, [])
  戻る位置
}

この機能は useMousePosition 関数で抽出しました。これで、使いたい場所にインポートできるようになりました。

最後に、通常の関数のように使用します

  定数位置 = useMousePosition()
  戻る (
    <div>
      x:{位置.x}
      y:{位置.y}
    </div>
  )

明らかにコード量は減っている

これで、React でカスタム フックを作成する方法に関するこの記事は終了です。React カスタム フックに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ReactHooks バッチ更新状態とルートパラメータの取得例の分析
  • React Hook: Effect Hookの使い方
  • 3分でReact-hooksとサンプルコードを理解する
  • React の 10 個のフックの紹介
  • React Hooksの詳細な説明
  • React Hook: ステートフックの使い方

<<:  docker compose を使用して consul クラスタ環境を構築する例

>>:  HTML でのテキストエリアの使用と一般的な問題およびケース分析

推薦する

ウェブサイトのフッター沈下現象に対する3つの解決策を詳しく解説

背景多くのウェブサイトのデザインは、一般的にコンテンツ+フッターの2つの部分で構成されています。コン...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

ウィンドウとLinuxプロジェクトを展開する際のLinuxファイルパスに問題はありません

長い間ブログを書いていませんでした。先週、プロジェクトをテストしたところ、いくつかのバグが見つかりま...

MySQLはランダムに一定数のレコードを抽出します

以前は、このような使用シナリオを処理するために rand() で直接 order していましたが、効...

dockerプライベート倉庫の構築と利用の詳細説明

1. リポジトリイメージをダウンロードする docker プルレジストリ 2. プライベートウェアハ...

CentOS 8 / RHEL 8 に VirtualBox 6.0 をインストールするための詳細なチュートリアル

VirtualBox は、技術者が異なる種類の複数の仮想マシン (VM) を同時に実行できるようにす...

HTML コメント HTML 内のテキストコメントをマークするための記号

HTML コメント。コードの横に HTML コメントを付ける必要があることがよくあります。そうするこ...

Vue プロジェクトでよく使用されるツール機能の概要

目次序文1. カスタムフォーカスコマンド1. 方法1 2. 方法2 3. 方法3 2. 入力ボックス...

Alibaba Cloud Docker Yum ソースを使用した Docker 17.03.2 の CentOS7 オンラインインストールの詳細説明

参照ドキュメント公式 Docker インストール ドキュメント: https://docs.dock...

スクロールバーのスタイルを設定するための CSS サンプルコード

スクロール バーのスタイルを設定するための CSS 実装コードは次のとおりです。 •::-webki...

Vueは秒殺しのカウントダウンコンポーネントを実装する

この記事では、2番目のキルカウントダウンコンポーネントを実装するためのVueの具体的なコードを参考ま...

面接では、select...for update がテーブルをロックするのか、それとも行をロックするのか尋ねられました。

目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...

MySQL移行計画と落とし穴の実践記録

目次背景解決策1: 古いデータをバックアップするオプション2: テーブルを分割する解決策3: tid...

Nginx バージョンのスムーズなアップグレードソリューションの詳細説明

目次背景: Nginx スムーズ アップグレード ソリューションフォールバック手順要約する背景:負荷...

mysql の存在する例と存在しない例の詳細な説明

mysql の存在する例と存在しない例の詳細な説明テーブルA |列1 | 列1 | 列3 |テーブル...