TypeError: Cannot read property 'setState' of undefined
Reactクラスコンポーネントでthisのコンテキストが失われるエラー
概要
Reactのクラスコンポーネントで、イベントハンドラやコールバック内でthis.setState()を呼び出す際、thisのコンテキストが失われて発生するエラーです。
エラーメッセージ
TypeError: Cannot read property 'setState' of undefined
TypeError: Cannot read properties of undefined (reading 'setState')
原因
- thisのバインド忘れ: メソッドをコールバックとして渡すとthisが失われる
- クラスメソッドのスコープ: JavaScriptのthisは呼び出し方によって変わる
- イベントハンドラ: onClickなどで直接メソッドを渡している
解決策
1. コンストラクタでbind
| |
2. アロー関数でクラスプロパティ(推奨)
| |
3. レンダリング時にアロー関数でラップ
| |
4. 関数コンポーネントに移行(推奨)
| |
5. コールバック関数の場合
| |
6. setTimeout/setIntervalの場合
| |
よくある間違い
this.handleClick()(括弧付き)で即時実行してしまう- mapのコールバック内でthisを参照する
- 親から渡されたコールバックを子でthisと一緒に使う
関連エラー
参考リンク
React の他のエラー
この記事は役に立ちましたか?