[React] 子要素に key プロパティを設定する警告は、子コンポーネントに設定しよう

 ビルドやエミュレータの中で以下のログが出るときの話です。

Warning: Each child in a list should have a unique "key" prop.
Check the top-level render call using <dl>. See https://reactjs.org/link/warning-keys for more information.

「リストの子についてはkeyを正しく設定しないと正しく動かないんだな」と、最初はこれを
見て子要素である dt や dd に key を設定して回りました。

const Child = (_item: any) => {
  return (<><dt key={`dt:${_item.id}`}>{_item.caption}</dt><dd key={`dd:${_item.id}`}>{_item.detail}</dd></>)
}
const Parent = () => {
  return ["日本", "東京都", "港区", "南青山"].map((_item,_index) => {
    return (<Child item={{ id: _index, caption: _item, detail: _item + 'についての説明です。' }} />)
  })
}

これだと、画面書き換えに正しく対応できないんですね。前回の描画内容が残ってしまう不具合が出ました。

ここでいいたいのは、子要素「li」「dt」「dd」ではなく、親から呼び出された子コンポーネントに key を指定すること。

const Child = (_item: any) => {
  return (<><dt>{_item.caption}</dt><dd>{_item.detail}</dd></>)
}
const Parent = () => {
  return ["日本", "東京都", "港区", "南青山"].map((_item,_index) => {
    return (<Child item={{ id: _index, caption: _item, detail: _item + 'についての説明です。' }} key={`childlist:${_index}`} />)
  })
}

これで正しく解釈、処理されます。