前提・実現したいこと
https://jsonplaceholder.typicode.com/
上記サイトからpostsを取得して、postsのidをkeyにしたオブジェクトを作成する。
valueには、apiから取得したkeyが対応するpostsのオブジェクトと、postsIdが一致するcommentsの配列を入れたい。
それを50投稿文作り以下のようなJSONファイルの形式で出力したい。
JavaScript
1{ 2 "1": { 3 "userId": 1, 4 "id": 1, 5 "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", 6 "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto", 7 "comments": [ 8 { 9 "postId": 1, 10 "id": 1, 11 "name": "id labore ex et quam laborum", 12 "email": "Eliseo@gardner.biz", 13 "body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium" 14 }, 15 { 16 "postId": 1, 17 "id": 2, 18 "name": "quo vero reiciendis velit similique earum", 19 "email": "Jayne_Kuhic@sydney.com", 20 "body": "est natus enim nihil est dolore omnis voluptatem numquam\net omnis occaecati quod ullam at\nvoluptatem error expedita pariatur\nnihil sint nostrum voluptatem reiciendis et" 21 }, 22 { 23 "postId": 1, 24 "id": 3, 25 "name": "odio adipisci rerum aut animi", 26 "email": "Nikita@garfield.biz", 27 "body": "quia molestiae reprehenderit quasi aspernatur\naut expedita occaecati aliquam eveniet laudantium\nomnis quibusdam delectus saepe quia accusamus maiores nam est\ncum et ducimus et vero voluptates excepturi deleniti ratione" 28 } 29 ] 30 }, 31 32}
そして、postsとcommentのapiを取得し、画面に表示することができました。
postの表示画像
しかし以下の点が分かりません。
・valueには、apiから取得したkeyが対応するpostsのオブジェクトと、postsIdが一致するcommentsの配列を入れ方
・50投稿文ループさせる方法がわからない(mapやwhileの指定が分からず)
・JSON形式にオブジェクトを入れる方法(JSONファイルを出力するにはnode.jsを使う方法しか出てこず分からない)
全てじゃなくて大丈夫なので、解決方法やヒントなどを教えていただきたいです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
JavaScript
1 2import React, {useState, useEffect} from 'react' 3import axios from 'axios' 4 5const ApiFetch = () => { 6 7 const [posts, setPosts] = useState([]) 8 9 useEffect(() => { 10 axios.get('https://jsonplaceholder.typicode.com/posts') 11 .then(res => { 12 setPosts(res.data) 13 }) 14 }, []) 15 16 const [comments, setComments] = useState([]) 17 18 useEffect(() => { 19 axios.get('https://jsonplaceholder.typicode.com/comments') 20 .then(res2 => { 21 setComments(res2.data) 22 }) 23 }, []) 24 25 return ( 26 <div> 27 <ul> 28 29 30 { 31 posts.map((post) => ( 32 <div> 33 <h1>{ post.id }</h1> 34 <ul> 35<li>"userId": {post.id}</li> 36<li>"userId": {post.title}</li> 37<li>"userId": {post.body}</li> 38 </ul> 39 </div> 40 41 ) 42 ) 43 } 44 { 45 comments.map((comment) => ( 46 <div> 47 <h1>{ posts.id }</h1> 48 <ul> 49<li>"userId": {comment.id}</li> 50<li>"title": {comment.title}</li> 51<li>"body": {comment.body}</li> 52 </ul> 53 </div> 54 ) 55 ) 56} 57 </ul> 58 59 </div> 60 ) 61} 62 63export default ApiFetch
試したこと
補足情報(FW/ツールのバージョンなど)
ReactはこちらのPackage.jsonを使っています。
JavaScript
1 2{ 3 "name": "react-file", 4 "version": "0.1.0", 5 "private": true, 6 "dependencies": { 7 "@testing-library/jest-dom": "^5.11.4", 8 "@testing-library/react": "^11.1.0", 9 "@testing-library/user-event": "^12.1.10", 10 "axios": "^0.24.0", 11 "react": "^17.0.2", 12 "react-dom": "^17.0.2", 13 "react-scripts": "4.0.3", 14 "web-vitals": "^1.0.1" 15 }, 16 "scripts": { 17 "start": "react-scripts start", 18 "build": "react-scripts build", 19 "test": "react-scripts test", 20 "eject": "react-scripts eject" 21 }, 22 "eslintConfig": { 23 "extends": [ 24 "react-app", 25 "react-app/jest" 26 ] 27 }, 28 "browserslist": { 29 "production": [ 30 ">0.2%", 31 "not dead", 32 "not op_mini all" 33 ], 34 "development": [ 35 "last 1 chrome version", 36 "last 1 firefox version", 37 "last 1 safari version" 38 ] 39 } 40} 41
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/25 00:19
退会済みユーザー
2021/11/25 00:46
2021/11/25 12:47
退会済みユーザー
2021/11/25 14:05
2021/11/26 02:31