0Pricing
React Academy · レッスン

Reactのよくあるエラーをデバッグする

key不足の警告、undefinedによるstateのバグ、ハイドレーションエラーを診断します

「Reactのよくあるエラーをデバッグする」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

ようこそ

このレッスンでは、React で最もよく発生するエラーである、key の不足に関する警告、undefined の state によるバグ、過剰な再レンダリング、ハイドレーションの不一致を診断します。

Key の不足に関する警告

React は「リスト内の各子要素には、一意の "key" prop が必要です」とログに出力します。これは、`key` prop を追加せずに配列をレンダリングした場合に発生します。各リスト項目に、安定した一意の key を追加して修正してください。
// Bad
items.map(item => <li>{item.name}</li>)

// Good
items.map(item => <li key={item.id}>{item.name}</li>)

undefined のプロパティを読み取れない

このクラッシュは、多くの場合、初回レンダリング時の state が `undefined` であることを意味します。state は必ず安全なデフォルト値(配列には `[]`、オブジェクトには `{}`、使用前に確認する値には `null`)で初期化してください。
// Bad — crashes if data is undefined
const [data, setData] = useState();
return <p>{data.name}</p>;

// Good
const [data, setData] = useState(null);
return data ? <p>{data.name}</p> : <p>Loading...</p>;

過剰な再レンダリングエラー

コンポーネントが無限のレンダリングループに入ると、React は *Too many re-renders* をスローします。通常は、レンダリング中に無条件で `setState` を呼び出しているか、毎回のレンダリングで実行される `() => setState(...)` をインラインで prop として直接渡していることが原因です。
// Bad — setState called on every render
function Counter() {
  const [n, setN] = useState(0);
  setN(n + 1); // infinite loop!
  return <p>{n}</p>;
}

過剰な再レンダリングの修正

state の更新は、イベントハンドラーまたは useEffect の中に移してください。コンポーネント本体のトップレベルで setState を直接呼び出してはいけません。
// Good — update only on click
function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n + 1)}>{n}</button>;
}

ハイドレーションの不一致に関する警告

SSR アプリでは、React は「ハイドレーションに失敗しました。初期 UI がサーバーでレンダリングされた内容と一致しません」と警告します。よくある原因は、レンダリング中に `Date.now()` や `Math.random()` を使用すること、またはブラウザー拡張機能が HTML を挿入することです。

ハイドレーションの不一致の修正

タイムスタンプやランダムな ID などの動的な値は、`useEffect` 内で初期化する `useState` に移してください。これにより、サーバーは常に静的な値をレンダリングし、クライアントはマウント後に更新できます。
const [ts, setTs] = useState('');
useEffect(() => {
  setTs(Date.now().toString());
}, []);
return <p>{ts}</p>;

State はすぐには更新されない

`setState` は非同期であることを覚えておいてください。呼び出した直後に state をログに出力すると、古い値が表示されます。更新後の値を確認するには、state 変数を依存配列に含めた `useEffect` 内でログを出力してください。
const [count, setCount] = useState(0);

function handleClick() {
  setCount(count + 1);
  console.log(count); // still old value!
}

useEffect(() => {
  console.log('updated:', count); // correct
}, [count]);

Prop の変更時にコンポーネントが更新されない

prop が変更されてもコンポーネントが更新されない場合は、オブジェクトや配列をその場で変更していないか確認してください。React は参照の同一性を使用するため、既存のオブジェクトを変更しても再レンダリングは発生しません。
// Bad — same reference, no re-render
const list = [];
list.push('item');
setList(list);

// Good — new array reference
setList([...list, 'item']);

エラーオーバーレイでエラーを読む

React アプリが開発中にクラッシュすると、ブラウザーにエラーオーバーレイが表示されます。下部にある **コンポーネントスタック**を確認してください。失敗したコンポーネントをレンダリングしたすべてのコンポーネントが表示されるため、バグの発生源を明確にできます。

確認問題

React の「Too many re-renders」エラーの最も一般的な原因は何ですか?

まとめ

これで、React でよく発生するエラーを修正できるようになりました。リストに安定した key を追加し、state を安全に初期化し、レンダリング中の setState を避け、ハイドレーションの不一致に対処し、エラーオーバーレイのコンポーネントスタックを読み取れます。

コース完了

おめでとうございます! **React DevTools & Debugging** を修了しました。これで、DevTools のインストール、コンポーネントツリーと state の確認、レンダリングのプロファイリング、React で頻発する実行時エラーの診断ができるようになりました。

よくある質問

「Reactのよくあるエラーをデバッグする」レッスンは無料ですか?

はい。「Reactのよくあるエラーをデバッグする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「Reactのよくあるエラーをデバッグする」で何を学びますか?

key不足の警告、undefinedによるstateのバグ、ハイドレーションエラーを診断します ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Reactのよくあるエラーをデバッグする」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. React DevToolsのインストールと起動
  2. コンポーネントツリーとPropsの調査
  3. Profilerタブを使う
  4. Reactのよくあるエラーをデバッグする
← React Academyに戻る