DevTracePad↗
日本語 ⌄
English简体中文日本語

実践ノート / エラー分析

スタックトレースは手がかりであり、結論ではない

最初に思いつく修正へ飛びつかず、例外を検証できる説明へ変える方法。

実際に起きたことから始める

例外の種類、メッセージ、自分で管理するコードの最初のフレームを保存します。関連する関数と渡された値も添えます。トレースは失敗時の呼び出し経路を示しますが、値が無効になった理由までは証明しません。ProductList の例では、undefined というメッセージに加え、useState() が初回描画の仮説を支える根拠になります。

別の説明も残す

初期値の誤り、応答形式の変更、エラー分岐での型の違いは、似た症状を起こします。それぞれを区別できる観察を考えます。何でもログに出すより、問題の式の直前で Array.isArray を確認し、応答の外側の構造を見る方が具体的です。機密情報がログに残らない環境で行ってください。

ガードと根本的な修正を分ける

products?.map で例外を隠せても、不正な応答は未処理のままかもしれません。配列で初期化しても、その後の異常なデータには対応できません。変更が対処する条件を明記し、読み込み中、空、失敗を別の状態として扱います。表示がないことを成功と見なさないためです。

小さな確認表で検証する

初回描画、正常で空ではない応答、空の応答、要求の失敗を確認します。試せない条件は未検証として残します。元の失敗入力を変更したコードと一緒に保存してください。AI の説明は調査計画であり、実際に観察した結果が検証の根拠です。

具体例で考える

エラー分析

作成済みの例:この固定結果はサンプル原文にのみ対応し、AI のリアルタイム回答ではありません。

原文

TypeError: Cannot read properties of undefined (reading "map")
 at ProductList (ProductList.jsx:18)
const [products, setProducts] = useState();
return products.map(product => <li key={product.id}>{product.name}</li>);

解説付きの結果

観察
初回描画で products.map を呼び出しますが、useState() の初期値は undefined です。

考えられる原因
初期状態が配列ではありません。この抜粋はその説明を支持しますが、API の応答形式までは確認できません。

次の確認
setProducts の前で応答の構造を調べます。配列は応答自体でしょうか、それとも response.items でしょうか。

変更案
useState([]) で初期化し、読み込み中・空データ・失敗を分けて扱います。設定前に応答を検証してください。

検証
初回描画、空の応答、正常な応答、通信失敗を確認します。この例ではコンポーネントを実行していません。