質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

731閲覧

[React] APIから渡ってきたデータをkeyを指定しつつ描画させる方法

DaisukeMori

総合スコア226

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/05/31 04:51

編集2020/05/31 04:54

悩み

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

key属性は一意になるものであればなんでもOKです。
NEWS APIは使ったことがないので詳しいことはわかりませんが、おそらくurlは一意になると思いますのでそれを使います。

jsx

1<div className="news"> 2 <h2>News</h2> 3 {articles.map((item) => ( 4 <div key={item.url}> 5 <a href={item.url} target="_blank">{ item.title }</a> 6 <img src={ item.urlToImage } alt={ item.title } /> 7 </div> 8 ))} 9</div>

投稿2020/05/31 04:58

markey

総合スコア355

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問