ReactJS - 関数组件のHook導入

こんにちは、将来のReact開発者さんたち!今日は、React Hooksの世界への興味深い旅に出発します。あなたの近所の親切なコンピュータサイエンスの先生として、このトピックを案内することを嬉しく思います。プログラミングが新しい方でも心配しないでください - 基礎から始めて少しずつ進めていきます。では、コーヒー(またはお好みでティー)を一杯取り、一緒に潜りましょう!

ReactJS - Introduction to Hooks

React Hooksとは?

本題に入る前に、React Hooksとは何かを理解しましょう。レゴの家を建てているとします。React Hooksは、あなたの家にスーパーパワーを与える特別なレゴのピースのようなものです。クラスを書かずに状態や他のReact機能を使用できるようにしてくれます。すごいですね?

Reactはバージョン16.8でHooksを導入し、以来ゲームチェンジャーとなっています。Hooksはコードをクリーンにし、再利用性を高め、理解しやすくします。部屋を片付けるようなものです - 整然としていると全てがより良く機能します!

ビルトインHook

ReactにはいくつかのビルトインHookがあります。最も一般的なものを見てみましょう:

Hook 目的
useState 関数组件が状態を管理する
useEffect 関数组件でサイドエフェクトを実行
useContext ネストを導入することなくReactコンテキストを購読
useReducer 関数组件で複雑な状態ロジックを管理
useCallback コールバックのメモ化版を返し、パフォーマンスを最適化
useMemo 高価な計算をメモ化
useRef 再レンダリングを越えて持続する可変参照を作成

これらのHookをいくつかの例で見ていきましょう!

useState

useState Hookは、あなたの组件の中に情報を保存し、更新する魔法の箱のようなものです。実際に見てみましょう:

import React, { useState } from 'react';

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

return (
<div>
<p>あなたは {count} 回クリックしました</p>
<button onClick={() => setCount(count + 1)}>
クリックしてね
</button>
</div>
);
}

この例では、useState(0)は状態変数countを0で初期化し、それを更新するための関数setCountを作成します。ボタンをクリックするたびにsetCountが呼び出され、countが更新され、组件が再レンダリングされます。

useEffect

useEffectは、あなたの组件のアラームクロックのようなものです。レンダリングのたびに実行され、サイドエフェクトを実行できます。以下に例を示します:

import React, { useState, useEffect } from 'react';

function WindowWidth() {
const [width, setWidth] = useState(window.innerWidth);

useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => {
window.removeEventListener('resize', handleResize);
};
}, []);

return <div>ウィンドウの幅: {width}</div>;
}

この组件は現在のウィンドウの幅を表示し、ウィンドウのサイズが変更されたときに更新します。useEffect Hookは、组件がマウントされたときにイベントリスナーを設定し、组件がアンマウントされたときにクリーンアップします。

Hookの適用

いくつかの例を見たので、効果的にHookを使用する方法について話しましょう:

  1. Hookはトップレベルで呼び出すだけ: ループ、条件、またはネストされた関数の中でHookを呼び出さないでください。これにより、组件がレンダリングするたびにHookが同じ順序で呼び出されることを保証します。

  2. HookはReact関数组件からのみ呼び出す: 通常のJavaScript関数からHookを呼び出さないでください。(一つの例外があります - カスタムHookからHookを呼び出すことができます)

  3. 複数のHookを使用: 単一の组件で必要なだけのHookを使用できます。各Hookの呼び出しは独立した状態を持ちます。

複数のHookを組み合わせた例を見てみましょう:

import React, { useState, useEffect } from 'react';

function FriendStatus(props) {
const [isOnline, setIsOnline] = useState(null);

useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});

if (isOnline === null) {
return '読み込み中...';
}
return isOnline ? 'オンライン' : 'オフライン';
}

この组件はuseStateuseEffectの両方を使用して、友達のオンラインステータスを管理します。

Hookの利点

Hookにはいくつかの利点があります:

  1. 再利用性: Hookは、组件の階層を変更することなく状態を持つロジックを再利用できます。

  2. 読みやすさ: Hookは、组件内のロジックを再利用可能な独立したユニットに整理する手助けします。

  3. 柔軟性: Hookは、状態を持つロジックを组件間で共有する際の柔軟性を高めます。

  4. シンプリシティ: Hookは、组件を理解し、テストするのがより簡単になります。

Hookの欠点

Hookは素晴らしいですが、課題もあります:

  1. 学習曲線: クラス组件に慣れている場合、Hookには異なる思考モデルが必要です。

  2. 過度の使用: 多すぎるカスタムHookを作成することがあり、過度な抽象化につながる可能性があります。

  3. デバッグ: Hookのデバッグは、特に初心者にとってクラス组件よりも難しいことがあります。

  4. ライフサイクルメソッドの制限: 一部のライフサイクルメソッドには直接のHook相当がありません。

結論

おめでとうございます!あなたはReact Hooksの世界への第一歩を踏み出しました。自転車に乗ることを学ぶのと同じように、Hookをマスターするには練習が必要です。すぐには理解できないかもしれませんが、実験を続け、プロジェクトを構築してください。

この終わりに、有名なコンピュータサイエンティストのアラン・ケイの言葉を思い出しています:「未来を予測する最良の方法は、それを発明することです。」React Hooksを学ぶことで、あなたはただ新しい機能を学んでいるだけでなく、ウェブ開発の未来を発明する装備を身につけています。

それでは、勇気を持ってコードを書き続け、あなたの组件が常にスムーズに再レンダリングされることを願っています!未来のReactマスターさん、幸せなコーディングを!

Credits: Image by storyset