React、Vueだと配列データを描画する際に各々のデータにkey
をセットしないとWarningが出ると思うのですが、このkeyに入れる値で、先日プルリクのレビューで新たな学びがあったので備忘録として記事にします。
レビューで指摘されたのは、
map()で、indexを使うのは、iteration対象(ループするもの)の値にkeyとして利用できるものがない場合のみにしましょう。
つまり、index
は極力使わないという事でした。
keyにindexが良くない理由
静的なデータで毎回中身が変わらないデータであればkeyにindexを使っても支障はないのですが、追加、削除などを伴う動的な配列データのkeyにindexを使うと期待通りに表示されないことが起こる。
indexはユニーク値ですが、データの追加・削除をした場合にindexの値も変化するからです。
keyに使える値はユニーク値であれば何でもいい
てっきりkeyにはid(ユニーク値だから)を使うものと思い込んでいましたが、別にそんなことはなく、ユニークな値であれば何でもよいらしいです。例えば、
・Eメールアドレス
・作成日などのUNIXタイムスタンプ(全く同じ時間に作られることはほぼない)
・単体でユニーク値がなければ、複数のデータを組み合わせて、ユニーク値を作る
などなど