目次
Reactの基本的なHooks: コンポーネントの基礎
Reactは、基本的なHooksを提供しています。 これらのHooksは、Reactコンポーネントを構築するための基本的な要素となります。 これらを理解し使いこなすことで、Reactアプリケーションは、強力で柔軟性があり、保守が容易なものとなります。 Reactの基本的なHooksには、状態の管理に使われるuseState
、副作用を扱うためのuseEffect
、計算結果をキャッシュするためのuseMemo
などがあります。
それぞれのHookは、異なる役割を果たし、特定の問題を解決するのに役立ちます。
useEffect
useEffect
は、コンポーネントのライフサイクルに関連した副作用を扱ううためのHookです。
ここでの「副作用」とは、コンポーネントの描画に影響を与える処理のことです。
例えば、APIからデータを取得する処理は、コンポーネントの描画に影響を与えるため、副作用と呼ばれます。
では、具体的な例を見てみましょう。
useEffect(() => {
fetch('https://api.example.com')
.then(response => response.json())
.then(data => setData(data));
}, []);
useEffect
を使用してAPIからデータを取得する副作用を作成しています。
第2引数の空配列により、この副作用はコンポーネントがマウントされた時に一度だけ実行されます。
このように、useEffect
を使うことで、コンポーネントのライフサイクルに関連した副作用を扱うことができるようになります。
useState
useState
は、関数コンポーネント内で状態を持つことができるようにするHookです。
ここでの「状態」とは、コンポーネントの内部で変化する値のことです。
例えば、ボタンをクリックするたびにカウントアップするようなコンポーネントを考えてみましょう。
const [count, setCount] = useState(0);
// countの値を増やす関数
const increment = () => setCount(count + 1);
// setCountを使ってcountの値を更新する
<button onClick={increment}>+</button>
useState
を使用して、初期値0のcount
という状態を作成し、それを更新するためのsetCount
という関数を取得しています。
このように、useState
を使うことで、関数コンポーネント内で状態を持つことができるようになります。
useContext
useContext
は、ReactのContext APIを扱うためのHookです。
これを使うと、コンポーネントツリーを通じてデータを共有することができます。
具体的な例を見てみましょう。
import React, { useState, useContext } from 'react';
const UserContext = React.createContext();
function App() {
const [user, setUser] = useState(null);
return (
<UserContext.Provider value={{ user, setUser }}>
<div>
<Header />
<Main />
</div>
</UserContext.Provider>
);
}
function Header() {
const { user } = useContext(UserContext);
return (
<header>
<h1>{user.name}</h1>
</header>
);
}
UserContext
というContextを作成し、App
コンポーネントのuser
という状態を共有しています。
これにより、Header
コンポーネントでuser
を参照することができるようになります。
そして、Header
コンポーネントでは、useContext
を使用してUserContext
を参照しています。
このように、useContext
を使うことで、コンポーネントツリーを通じてデータを共有することができます。
Props
が多重構造になると複雑になってしまいますが、useContext
を使うことで、コンポーネント間でデータを簡単に共有することができます。
useState
は関数コンポーネント内で状態を持つことができるようにするHookですが、useContext
は、コンポーネントツリーを通じてデータを共有することができるようにするHookです。
useMemo
useMemo
は、計算結果をキャッシュするためのHookです。
これを使うと、コンポーネントの再レンダリング時に、計算コストの高い関数を実行する必要がなくなります。
const memoizedValue = useMemo(() => {
// 計算コストの高い関数
return computeExpensiveValue(a, b);
}, [a, b]);
computeExpensiveValue
という計算コストの高い関数を実行し、その結果をmemoizedValue
という変数に格納しています。
第2引数の配列には、computeExpensiveValue
の計算に使用する値を指定します。
このように、useMemo
を使うことで、毎回計算コストの高い関数を実行する必要がなくなり、パフォーマンスを向上させることができます。
初心者のうちは、useMemo
を使う機会は少ないかもしれませんが、パフォーマンスを向上させるためには重要なHookです。
useCallback
useCallback
は、関数をメモ化するためのHookです。
これを使うと、コンポーネントの再レンダリング時に、関数を再定義する必要がなくなります。
const memoizedCallback = useCallback(() => {
doSomething(a, b);
}, [a, b]);
doSomething
という関数をメモ化し、memoizedCallback
という変数に格納しています。
第2引数の配列には、doSomething
の実行に使用する値を指定します。
このように、useCallback
を使うことで、毎回関数を再定義する必要がなくなり、パフォーマンスを向上させることができます。
useMemo
と useCallback
は、どちらも計算コストの高い関数を実行する際に使用しますが、useMemo
は計算結果をキャッシュするためのHookで、useCallback
は関数をメモ化するためのHookです。
混同しやすいHookですが、それぞれの特徴を理解しておきましょう。
カスタムHooks
React Hooksの強力な機能の1つは、自分自身でHooksを作成し、再利用可能なロジックをカプセル化することができる点です。 これらのカスタムHooksは、use
というプレフィクスで始まる関数として定義します。
function useCounter(initialCount = 0) {
const [count, setCount] = useState(initialCount);
const increment = () => setCount(count + 1);
return { count, increment };
}
useCounter
というカスタムHookを作成しています。
そして、このカスタムHookを使って、以下のようにコンポーネントを作成することができます。
function Counter() {
const { count, increment } = useCounter();
return (
<div>
<p>count: {count}</p>
<button onClick={increment}>increment</button>
</div>
);
}
function useCounter(initialCount = 0) {
const [count, setCount] = useState(initialCount);
const increment = () => setCount(count + 1);
return { count, increment };
}
function useCounterWithAlert(initialCount = 0) {
const { count, increment } = useCounter(initialCount);
const incrementWithAlert = () => {
increment();
alert(`count: ${count}`);
};
return { count, incrementWithAlert };
}
useCounter
というカスタムHookを使って、useCounterWithAlert
というカスタムHookを作成しています。
カスタムHookは初心者のうちはあまり使う機会はないかもしれませんが、コンポーネントのロジックを再利用するためには重要な機能です。
カスタムHookを使って、コンポーネントのロジックを再利用することを意識していきましょう。
まとめ
React Hooksは、Reactの機能を拡張するための機能です。 Hooksを使うことで、クラスコンポーネントを使わずに、関数コンポーネントで状態を持つことができるようになります。 また、Hooksを使うことで、関数コンポーネントでライフサイクルメソッドを使うことができるようになります。 Hooksは、useState
、useEffect
、useContext
、useMemo
、useCallback
など、様々な種類があります。
初心者のうちは、useState
とuseEffect
を使う機会が多いかもしれませんが、それ以外のHooksも理解しておきましょう。
React を効率的に身につける勉強法は?
React には興味があっても、プログラミング学習をはじめたばかりであれば、以下のような疑問を持つかもしれません。
- Reactエンジニアとして活躍するために何をすればいい?
- 何から勉強すればいいんだろう?
- 絶対に転職を成功させるには?
React は習得が比較的難しいため、勉強法の選び方を間違うと時間・労力・お金が無駄になってしまいます…。
そのため、こちらの記事を参考に、ご自身に最適な学習方法を選んでみませんか?
【初心者向け】Reactのおすすめ勉強法3選を現役エンジニアが比較・解説! | Muscle Coding
Reactの効果的な学習方法を現役エンジニアが解説!本、動画教材(Udemy)、プログラミングスクールの特徴を比較し、最適な方法を提案します。初心者でも理解しやすい、効率…