propsが渡ってこないときの原因と対策

propsが undefined になる主な理由とそのチェックポイント


❓ よくある症状

  • propsundefined になる
  • コンソールに TypeError: Cannot read property 'xxx' of undefined
  • コンポーネント内で受け取ったはずの値が空

✅ チェックすべきポイント一覧

原因 説明 対策例
親から渡していない JSXにpropsを指定し忘れている <Child name="Takuma" /> を確認
props名のスペルミス 小文字・大文字の違い、キャメルケース崩れなど nameName は別物
構造分割でミスしている props 全体ではなく props.name を使っているのにnameがない ({ name })props.name のどちらかに統一
テスト時のpropsの渡し忘れ JestやRTLでコンポーネントをテストする際にprops未指定 テストコードで props を明示的に渡す
デフォルト値が必要な型定義ミス(TypeScript) optionalでないのに未指定になっている name?: string か、defaultProps で補完
子コンポーネントの受け取りコードの書き間違い function Component(props)function Component() にしてしまっている 正しく props を受け取っているか確認

📌 例:propsが渡らないケースと対策

❌ NG: 親から渡していない

// 親コンポーネント
<Child />
// 子コンポーネント
const Child = ({ name }) => {
  return 
<p>Hello, {name}</p>
}

結果 → Hello, undefined

✅ 修正:

<Child name="拓磨" />

❌ NG: propsの構造分割に失敗している

const Child = (props) => {
  const { Name } = props  // ← 大文字スペルミス
  return 
<p>{Name}</p>
}

✅ 修正:

const Child = ({ name }) => {
  return 
<p>{name}</p>
}

❌ NG: テスト時にprops未設定

render(<GreetingForm />) // ← nameを渡していない

✅ 修正:

render(<GreetingForm name="Test" />)

🛠 TypeScriptの注意点

type Props = {
  name: string  // 必須
}

const Component = ({ name }: Props) => {
  return 
<p>{name}</p>
}

✅ 対策①:propsを optional にする

type Props = {
  name?: string
}

✅ 対策②:defaultProps で補完(関数コンポーネントでは useMemo 等を使って手動で補完)


✅ まとめ

状況 チェックポイント
値が来ていない 親が props を渡しているか
受け取りに失敗している 構造分割・スペルミスを確認
テストでうまく動かない render() の props を忘れていないか
TypeScriptで型エラー optional化 or デフォルト補完の検討

🔗 参考

コメントを残す 0

Your email address will not be published.