すごいReactフック8選

本記事は、[Simon Holdorf](https://simonholdorf.com/)氏による「[8 Awesome React Hooks](https://thesmartcoder.dev/awesome-react-hooks/)」（2021年4月4日公開）の和訳を、著者の許可を得て掲載しているものです。

#すごいReactフック8選

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1591267990439-bc68529677c3%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DMnwxMTc3M3wwfDF8c2VhcmNofDE1fHxob29rc3xlbnwwfHx8fDE2MTc1NTUzMTE%26ixlib%3Drb-1.2.1%26q%3D80%26w%3D2000&w=2048&q=80)

##はじめに

React.jsは現在、フロントエンド開発者に最も人気のあるJavaScriptライブラリです。Facebookが開発し、オープンソースのプロジェクトとして提供されているReactは、世界中の開発者や企業が使用しています。

Reactは、シングルページアプリケーションの構築方法を大きく変えました。その最大の特徴の1つがフックです。フックは2019年に導入されたもので、状態処理の時に、クラスコンポーネントの代わりに関数コンポーネントを使用できるようになりました。組み込みのフックに加えて、Reactは独自のカスタムフックを実装する方法を提供しています。

ここでは、アプリケーションやプロジェクトで使用できる、カスタムフックとその実装に関するお気に入りをいくつか紹介します。

##1. useTimeout

宣言型アプローチで`setTimeout`を実装できます。まず、コールバックと遅延を受け取るカスタムフックを作成します。次に、`useRef`フックを使用して、コールバック関数の参照を作成します。最後に、`useEffect`を2回使用します。1回は最後のコールバックを記憶するため、1回はタイムアウトの設定とクリーンアップのためです。

これは、タイマーの実装例です。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2F6wVwlZFsyai6ND4qr6nH7j%2F6c6501fffae8798de290fd67adfe80a1%2Frh1.png&w=1040&q=75)

##2. usePrevious

アプリケーションで使用できる素晴らしいカスタムフックです。プロップや以前の状態を保存できます。まず、値を受け取るカスタムフックを作成します。次に、`useRef`フックを使用して、その値の参照を作成します。最後に、`useEffect`を使用して最新の値を記憶します。

これは、カウンターの実装例です。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2F5Jo9rQN54DRh0Bbtq3mCW5%2Facae81a63e224172ee810eeea1bff12e%2Frh2.png&w=1040&q=75)

##3. useClickInside

ラップされたコンポーネントの内側をクリックするイベントを処理する場合は、`useClickInside`フックが適しています。まず、クリックイベントを処理するために参照とコールバックを受け取るカスタムフックを作成します。次に、`useEffect`を使用して、クリックイベントの追加とクリーンアップを行います。最後に、`useRef`を使用して、クリックするコンポーネントの参照を作成し、それを`useClickInside`フックに渡します。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2F4nIDUQsfiejVRFF3eLJ1v9%2F99ba9dea377583c09ba96269e32b1f8f%2Frh3.png&w=1040&q=75)

##4. useClickOutside

`useClickOutside`フックは、`useClickInside`フックと非常に似ていますが、ラップされたコンポーネントの内側ではなく外側のクリックを処理します。ここでも、クリックイベントを処理するために参照とコールバックを受け取るカスタムフックを作成します。次に、`useEffect`を使用して、クリックイベントの追加とクリーンアップを行います。最後に、`useRef`を使用して、コンポーネントの 参照を作成し、それを`useClickOutside`フックに渡します。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2FWilMHRGnV8sLSLL41CqZL%2Fbbba6697b6400d234b88acf6ea9c3072%2Frh4.png&w=1040&q=75)

##5. useFetch

宣言型アプローチで`fetch`を実装できます。まず、`useState`を使用して、応答／エラー状態変数を初期化します。次に、`useEffect`を使用して`fetch`を非同期に呼び出し、状態を更新します。最後に、応答／エラー変数を含むオブジェクトを返します。

これは、Star Wars APIからキャラクターをfetchし、その名前をレンダリングする方法の例です。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2F5l1p7UFaD95p1zJt2zgu0z%2F291c3c93d98870a4a6ae3fb1adbf730c%2Frh5.png&w=1040&q=75)

##6. useInterval

宣言型アプローチで`setInterval`を実装できます。まず、コールバックと遅延を受け取るカスタムフックを作成します。次に、`useRef`を使用して、コールバック関数の参照を作成します。最後に、`useEffect`を使用して最後のコールバックを記憶し、間隔の設定とクリーンアップを行います。

これは、ブラウザゲームで使用できるカスタム`ResourceCounter`の実装例です。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2F3Cm21kv0bD7el75ie3NXC2%2F99e1df7e03c0b7578710deed69df6b2b%2Frh6.png&w=1040&q=75)

##7. useComponentDidMount

コンポーネントがマウントされた直後にコールバックを実行します。2番目の引数に空の配列を指定して`useEffect`を使用するだけで、コンポーネントがマウントされた直後に指定したコールバックを1回実行します。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2FkHvi3aY1tfWFt0DMgSC66%2F8f749220a7221e9e22a85cd29fad5929%2Frh7.png&w=1040&q=75)

##8. useComponentWillUnmount

`useComponentWillUnmount`は`useComponentDidMount`と似ていますが、コンポーネントがアンマウントされた直後にコールバックを実行します。2番目の引数に空の配列を指定して`useEffect`を使用し、クリーンアップの直前に指定したコールバックを実行します。

![](https://thesmartcoder.dev/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2F28643bqnqgzl%2F2Aju8NS7W90tAQpss4D9kd%2Fe8d3982dbb01f0335e49d6059effced4%2Frh8.png&w=1040&q=75)

##おわりに

以上、アプリケーションで使用できるカスタムReactフックのお気に入りの一部でした。

**記事を気に入ったら[Twitter](https://twitter.com/simonholdorf)でフォローしてください。プログラミング、制作、執筆、キャリアについてもっと学べます🥰**

##翻訳協力

この記事は以下の方々のご協力により公開する事ができました。改めて感謝致します。

Original Author: [Simon Holdorf](https://simonholdorf.com/) ([@simonholdorf](https://twitter.com/simonholdorf))
Original Article: [8 Awesome React Hooks](https://thesmartcoder.dev/awesome-react-hooks/)
Thank you for letting us share your knowledge!

選定担当: @gracen
翻訳担当: @gracen
監査担当: -
公開担当: @gracen

>**こちらもどうぞ**
>[すごいReactパッケージ5選](https://qiita.com/baby-degu/items/e183b20dd20b20920e00)
>[クリーンなReactプロジェクトの21のベストプラクティス](https://qiita.com/baby-degu/items/ea4eede60bbe9c63a348)

##ご意見・ご感想をお待ちしております
今回の記事はいかがでしたか？
・こういう記事が読みたい
・こういうところが良かった
・こうした方が良いのではないか
などなど、率直なご意見を募集しております。
頂いたお声は、今後の記事の質向上に役立たせて頂きますので、お気軽に
コメント欄にてご投稿ください。[Twitter](https://twitter.com/BabyDegu?lang=ja)でもご意見を受け付けております。
皆様のメッセージをお待ちしております。