React: Cannot read properties of undefined
ReactでuseState/useEffectを使った非同期データ処理時に発生するTypeError
概要
ReactでTypeError: Cannot read properties of undefinedが発生する主な原因は、非同期でデータを取得する前にレンダリングが実行されることです。useStateの初期値がnullやundefinedのまま、その値のプロパティにアクセスしようとしてエラーになります。
エラーメッセージ
TypeError: Cannot read properties of undefined (reading 'name')
TypeError: Cannot read properties of null (reading 'map')
発生パターン
パターン1: 初回レンダリング時にデータがない
| |
パターン2: 配列データのmap前にnullチェックなし
| |
パターン3: propsがundefined
| |
解決策
1. 条件付きレンダリング(早期リターン)
最も明確な方法。ローディング状態も表示できます。
| |
2. オプショナルチェイニング
シンプルにundefinedを許容する場合。
| |
3. 配列の初期値を空配列にする
mapを使う場合は初期値を[]にするのがベスト。
| |
4. propsにデフォルト値を設定
| |
5. TypeScriptで型安全にする
| |
カスタムフックで再利用
データ取得パターンを共通化すると安全です。
| |
よくある間違い
- useEffectの依存配列の設定ミス: 依存配列が空だと初回のみ実行、依存値があると再実行される
- 非同期関数をuseEffect内で直接定義しない: クリーンアップ処理ができなくなる
- stateの更新が非同期であることを忘れる:
setState直後に新しい値を参照してもまだ古い値
関連エラー
- TypeError: Cannot read properties of undefined - 基本的な原因と解決策
- Objects are not valid as a React child - オブジェクトをそのまま描画しようとした
- Too many re-renders - 無限ループによる再レンダリング
関連エラー
JavaScript の他のエラー
この記事は役に立ちましたか?