【react &NEXT.js】Warning: Each child in a list should have a unique "key" propでハマった話
react & NEXT.jsにおいて。エラーメッセージ:Warning: Each child in a list should have a unique "key" propで困っている人向けの記事です。
NEXT.js
react
こんにちは。エンジニア歴6ヶ月のざまです。
今回は、タイトルの通り、reactのkeyでハマった話です。
Next.jsでswiperライブラリを使用中に発生しました。
私みたいな初学者の方の参考になれれば幸いです。
該当コード
Carousels.tsx
{menus.map((menu) => {
return (
<>
<SwiperSlide key={menu.name}>
<Image src={menu.src} w='100%' h={{base:'300',md:'600'}} alt={menu.alt}></Image>
<Text>{menu.discription}</Text>
</SwiperSlide>
</>
)
})}
エラーメッセージ:Warning: Each child in a list should have a unique "key" prop
なぜ??
keyをちゃんと付けているのに怒られてる。。。
色々ググった結果、フラグメントにもkeyを付けないといけないとのことでした。
参考記事
https://tech.motoki-watanabe.net/entry/2021/01/10/143047
今回の場合だと、フラグメントを付けないか、フラグメントにkeyを入れたら解決いたしました。
解決コード
Carousels.tsx
{menus.map((menu) => {
return (
<React.Fragment key={menu.name}>
<SwiperSlide key={menu.name}>
<Image src={menu.src} w='100%' h={{base:'300',md:'600'}} alt={menu.alt}></Image>
<Text>{menu.discription}</Text>
</SwiperSlide>
</React.Fragment>
)
})}
話変わりますが、
個人的に、swiperはreact系だと向いていない気がしました。
Splide
https://ja.splidejs.com/integration/react-splide/
こちらの方がドキュメントも見やすくて、自分は好きです。