keyの警告が出る理由とその対処法

リストレンダリング時に出る「key」警告の原因と正しい指定方法


⚠️ 警告メッセージ

Warning: Each child in a list should have a unique "key" prop.

これは、Reactで配列を .map() などでレンダリングする際に、key属性を正しく指定していないと発生する警告です。


❓ なぜ key が必要?

  • ReactはDOMの差分を高速に検出(=再描画の最適化)するために、各要素を一意に識別したい。
  • keyがない or 重複していると、Reactは同じコンポーネントを別物として扱ってしまう可能性がある。

❌ NG例:keyが指定されていない

const items = ['Apple', 'Banana', 'Orange']

return (

<ul>
    {items.map((item) => (

<li>{item}</li>  // ← keyなし
    ))}
  </ul>
)

✅ OK例:一意のkeyを指定する

return (

<ul>
    {items.map((item) => (
      <li key={item}>{item}</li>
    ))}
  </ul>
)

文字列・IDなど一意性のある値を使うのが原則です。


⚠️ indexをkeyに使うのはアリ?

{items.map((item, index) => (
  <li key={index}>{item}</li>  // indexをkeyにしている
))}

✅ 適しているケース:

  • リストが 一度きりで変化しない(追加/削除/並び替えなし)

❌ 適していないケース:

  • リストの要素が 頻繁に入れ替わる・変更される場合
    → 意図しない再描画や状態のずれが起きる可能性あり

💡 よくある間違いと対策

状況 NG例 対策
重複した値をkeyにしている key={item.category} idなど一意な値を使う
map()で複数コンポーネントを返す <><Component /><Component /></> Fragmentにも key をつける必要があることも
keyを親に書いて子を返してる keyが子に反映されず効果がない .map()直下の要素にkeyを指定する必要あり

🧪 デバッグのヒント

  • コンソールの警告ログに "key" と出たら必ずチェック
  • 開発ツールで「DOMが勝手に消える・再描画される」などの症状が出たら疑う

✅ まとめ:keyの正しい使い方

ルール 説明
一意の値を使う idやUUIDなどが理想
配列のindexは極力避ける 安定しない並び順だとバグの元に
警告が出たら無視しない 再描画やアニメーションに影響する
keyは要素のルート(最上位)に指定する Fragmentやdivなどmap直下に書く

🔗 参考

コメントを残す 0

Your email address will not be published. Required fields are marked *