悩み
NEWS APIから情報を取得して描画させる際、keyを指定しないと、Warning: Each child in a list should have a unique "key" prop.
が出てしまうので、指定したいのですが、その書き方がわからず困っています。
#できたこと
keyを指定せずにAPI情報描画
jsx
1import React, { useState, useEffect } from 'react'; 2import axios from 'axios'; 3 4const URL = `https://newsapi.org/v2/top-headlines?country=jp&apiKey=各自のキーを入れる`; 5 6const NewsIndex = () => { 7 const [articles, setArticles] = useState([]); 8 9 console.log(articles); 10 11 useEffect(() => { 12 fetchArticles(); 13 }, []); 14 15 const fetchArticles = async () => { 16 try { 17 const response = await axios.get(URL); 18 setArticles(response.data.articles) 19 } catch (error) { 20 console.error(error); 21 } 22 } 23 24 return ( 25 <div className="news"> 26 <h2>News</h2> 27 {articles.map((item) => ( 28 <div> 29 <a href={item.url} target="_blank">{ item.title }</a> 30 <img src={ item.urlToImage } alt={ item.title } /> 31 </div> 32 ))} 33 </div> 34 ); 35} 36 37export default NewsIndex;
試したこと
Object.keys
を取り出してkey
に指定
jsx
1// 省略 2return ( 3 <div className="news"> 4 <h2>News</h2> 5 {/* {articles.map((item) => ( 6 <div> 7 <a href={item.url} target="_blank">{ item.title }</a> 8 <img src={ item.urlToImage } alt={ item.title } /> 9 </div> 10 ))} */} 11 {/* 以下に書いてみたけどうまくいかない */} 12 {Object.keys(articles).forEach((key) => { 13 {articles.map((item) => ( 14 <div key={key}> 15 <a href={item.url} target="_blank">{ item.title }</a> 16 <img src={ item.urlToImage } alt={ item.title } /> 17 </div> 18 ))} 19 })} 20 </div> 21 ); 22// 省略
console
1./src/components/News/Index.js 2 Line 34:9: Nested block is redundant no-lone-blocks 3 Line 36:32: Using target="_blank" without rel="noopener noreferrer" is a security risk: see https://mathiasbynens.github.io/rel-noopener react/jsx-no-target-blank
参考 API元抜粋
json
1articles: [ 2{ 3source: { 4id: null, 5name: "Mdpr.jp" 6}, 7author: "モデルプレス編集部", 8title: "ダレノガレ明美、薬物検査の結果発表 - モデルプレス", 9description: "モデルのダレノガレ明美が31日、TBS系「サンデー・ジャポン」(毎週日曜9時54分~)に出演。薬物疑惑報道を受け、行った毛髪検査の結果を生発表した。", 10url: "https://mdpr.jp/news/detail/2087680", 11urlToImage: "https://img-mdpr.freetls.fastly.net/article/uq_T/wm/uq_TJuAsSJRgHttqx4aCaGLgOUe_6AuPrRW1HYUwlWo.jpg?width=700&disable=upscale&auto=webp", 12publishedAt: "2020-05-31T02:33:34Z", 13content: null 14}, 15 16...他記事がいくつか入っている 17 18}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。