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 でのテキストエリアの使用と一般的な問題およびケース分析

推薦する

docker で zabbix_agent をデプロイする方法

zabbix_agent のデプロイメント:推奨事項: zabbix_agent は docker-...

10分でCSS3グリッドレイアウトを理解する

基本的な紹介前回の記事では、CSS3 のフレックスボックスを紹介しました。今日は、CSS3 のもう ...

リモートホスト上でスクリプトや命令を実行する Zabbix の詳細な説明

シナリオ要件1. zabbix_server Web インターフェースのスクリプト機能を使用すると、...

XHTML CSS ウェブサイトデザインの利点と問題点

XHTML は現在国際的に推奨されている標準的な Web サイト設計言語です。Webjx.com も...

Alibaba Cloud Server に MySQL データベースをインストールする詳細なチュートリアル

目次序文1. MySQLをアンインストールする2. MySQLをインストールする要約する序文学習中に...

Linux システムで MySQL の文字セットを UTF8 に変更する手順

目次1. データベース内の MySQL ステータスを確認します。 2. 設定ファイルを変更します。 ...

Docker 自動ビルド 自動ビルド実装プロセス図

自動ビルドとは、Docker Hub を使用して、Dockerfile ファイルを含む GitHub...

CSS スタイルの優先順位とカスケード順序に関する議論

一般的に: [重要なフラグ1つ] > [特別なフラグ4つ] > 宣言順!importan...

ハイパーリンクAタグを学ぶ

聞く: CSS を使用してハイパーリンクのスタイルを設定しましたが、ホバーしても機能しません。なぜこ...

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...

MySQL データベースで UTF-8 エンコードを設定する方法

/etc/my.cnf または /etc/mysql/my.cnf ファイルを変更する [クライアン...

Vueはシンプルなメモ帳機能を実装します

この記事では、参考までに、簡単なメモ帳機能を実装するためのVueの具体的なコードを紹介します。具体的...

Linux システム AutoFs 自動マウント サービスのインストールと構成

目次序文1. サービスプログラムをインストールする2. メイン設定ファイルを書く3. サブ構成ファイ...

IntelliJ IDEA で Java を使用して MySQL データベースに接続する方法の詳細な説明

1. MySQLデータベースをダウンロードし、インストールして設定するダウンロードアドレス: htt...

CSS 前景と背景の自動カラーマッチング技術の紹介 (デモ)

1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...