Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】“Getting Started with React Hooks: useState and useEffect Explained”

2025年09月30日に「Dev.to」が公開したITニュース「“Getting Started with React Hooks: useState and useEffect Explained”」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

React Hooksは、関数コンポーネントで状態管理と副作用を扱いやすくする機能だ。特にuseStateは状態を追加し、useEffectはデータ取得やDOM更新といった副作用を実行する。この二つのHookを学ぶことが、Reactコードをシンプルにする第一歩となる。

ITニュース解説

Webアプリケーション開発において、Reactはユーザーインターフェースを構築するための非常に人気のあるフレームワークの一つである。アプリケーションを開発する上で、画面に表示される情報(状態)の管理や、外部データとの連携といった「副作用」の処理は避けて通れない重要な要素となる。React Hooksは、これらの複雑な処理をよりシンプルかつ効率的に記述するための強力な機能であり、特にシステムエンジニアを目指す初心者にとって、現代のReact開発を理解する上で不可欠な知識である。

Hooksが導入される以前、Reactでは「クラスコンポーネント」という形式で状態管理や副作用を扱っていた。しかし、クラスコンポーネントはJavaScriptのクラス構文に慣れていない初心者には少し難解で、コードが複雑になりがちという課題があった。そこで登場したのがHooksである。Hooksを使うことで、「関数コンポーネント」というよりシンプルで直感的な形式で、状態管理や副作用といった、本来クラスコンポーネントでしか扱えなかった機能を扱えるようになる。これにより、コードの記述量が減り、可読性や再利用性が向上し、より分かりやすいアプリケーションを構築できるようになる。

Hooksの中でも、特に基本となるのが「useState」と「useEffect」の二つだ。これらを理解することが、React Hooksをマスターする上での第一歩となる。

まず「useState」について解説する。Webアプリケーションでは、ユーザーの操作や時間の経過によって画面の表示内容が変化することがよくある。例えば、ボタンをクリックするたびに数値が増減するカウンターや、入力フォームに文字を入力するとリアルタイムで表示が更新されるような機能だ。このような「時間とともに変化するデータ」のことを、Reactでは「状態(State)」と呼ぶ。useStateは、この状態を関数コンポーネント内で定義し、管理するためのHookである。

関数コンポーネントは、通常のJavaScript関数と同様に、実行されるたびにその内部の変数が初期化される。そのため、単にJavaScriptの変数としてlet count = 0;のように定義しても、ボタンがクリックされてコンポーネントが再実行されるたびにcount0に戻ってしまい、変化を保持することができない。useStateは、このような関数の性質を乗り越え、コンポーネントが再レンダリングされても状態を保持し続ける特別な変数を提供してくれる。

useStateを使うと、const [現在の値, 値を更新する関数] = useState(初期値);という形式で状態を定義する。例えば、カウンターの例であれば、const [count, setCount] = useState(0);のように書く。ここでcountが現在の状態の値、setCountがその値を更新するための関数である。useState(0)は、countの初期値が0であることを意味する。setCount(count + 1)のように更新関数を呼び出すことで、countの値を変更できる。そして、この更新関数が呼ばれて状態が変更されると、Reactは自動的にその状態を使っているコンポーネントを再レンダリングし、画面の表示を最新の状態に更新してくれるのだ。これにより、開発者は状態の変化と画面の更新を意識することなく、シンプルにデータの変更に集中できる。

次に「useEffect」について解説する。Webアプリケーションでは、画面に表示される内容以外にも、様々な「裏方」の処理が必要になることがある。例えば、Webページを開いたときにサーバーからデータを取得して表示したり、ユーザーがスクロールしたときに特定の要素の位置を調整したり、外部のサービスと連携したりする処理などだ。これらの、コンポーネントのレンダリング(画面表示)とは直接関係しないが、アプリケーションの機能として必要な処理のことを「副作用(Side Effect)」と呼ぶ。useEffectは、この副作用を関数コンポーネント内で実行するためのHookである。

副作用は、コンポーネントが描画された後や、特定の状態が変更されたときに実行されるべき処理が多い。例えば、初めて画面が表示されたときに一度だけデータを取得したい、あるいは特定のユーザーIDが変更されたときに、そのIDに対応するユーザーの詳細情報を再度取得したい、といったケースだ。useEffectは、このようなタイミングで任意の処理を実行できるようにしてくれる。

useEffectの基本的な使い方は、useEffect(() => { /* 副作用処理 */ }, [依存配列]);という形式だ。一つ目の引数には、実行したい副作用の処理を記述した関数を渡す。二つ目の引数は「依存配列」と呼ばれ、非常に重要な役割を果たす。この依存配列に指定された値が変化した場合にのみ、副作用の処理が再実行されるように制御するのだ。

もし依存配列が空の配列[]であれば、その副作用はコンポーネーントが初めてレンダリングされたときに一度だけ実行され、それ以降は再実行されない。これは、初回ロード時にサーバーからデータを一度だけ取得するようなケースで非常に役立つ。もし依存配列を省略した場合、副作用はコンポーネントが再レンダリングされるたびに毎回実行されてしまうため、無限ループに陥ったり、不要な処理が何度も実行されたりする可能性があるため注意が必要だ。特定の変数(例えばユーザーIDなど)を依存配列に含めれば、その変数の値が変わったときにだけ副作用が再実行される。これにより、開発者は副作用が実行されるタイミングを細かくコントロールできる。

また、useEffectには「クリーンアップ関数」という概念も存在する。副作用の中には、イベントリスナーの登録やタイマーの設定など、使い終わったら解除したり停止したりする必要がある処理もある。これらを放置すると、メモリリークや意図しない動作につながる可能性がある。useEffectの第一引数の関数がreturnする関数が、このクリーンアップ関数として機能する。例えば、イベントリスナーを登録した場合、クリーンアップ関数内でそのイベントリスナーを解除することで、コンポーネントが画面から削除される際や、次の副作用が実行される前に不要なリソースを適切に解放できる。これにより、アプリケーションの安定性とパフォーマンスを向上させることができる。

結論として、React Hooks、特にuseStateとuseEffectは、現代のReactアプリケーション開発において非常に強力で、欠かせないツールである。useStateは関数コンポーネントで「状態」を保持し、その変化に応じて画面を自動で更新する仕組みを提供する。useEffectはコンポーネントの「副作用」を、適切なタイミングで安全に実行するための仕組みを提供する。これら二つのHooksをマスターすることで、複雑になりがちな状態管理や外部連携のコードを、よりシンプルかつ効率的に記述できるようになる。システムエンジニアを目指す上では、これらの基本的なHooksから学び始め、その概念と使い方をしっかりと理解することが、Reactを用いたモダンなWeb開発の第一歩となるだろう。Hooksを使いこなすことで、より堅牢で保守しやすいアプリケーションを開発する能力を身につけることができる。

関連コンテンツ

関連IT用語