前提・実現したいこと
Laravel APIをReactで受け取りmapメソッドでループ処理したいです。
ただ、Reactで受け取った値が、なぜか無限ループして429 (Too Many Requests)となり、エラーになってしまいます。
発生している問題・エラーメッセージ
以下のコードでconsole.log(data)をしてみたところ、無限ループが発生してしまいます。
また、mapメソッドが表示されません。
該当のソースコード
API
1[{"id":1,"name":"\u30ab\u30b9\u30bf\u30e0\uff08\u8eca\uff09","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":2,"name":"\u30ab\u30b9\u30bf\u30e0\uff08\u30d0\u30a4\u30af\uff09","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":3,"name":"\u677f\u91d1\u4fee\u7406\uff08\u8eca\uff09","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":4,"name":"\u677f\u91d1\u4fee\u7406\uff08\u30d0\u30a4\u30af\uff09","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":5,"name":"\u8eca\u8ca9\u58f2","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":6,"name":"\u30d0\u30a4\u30af\u8ca9\u58f2","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":7,"name":"\u8eca\u8cb7\u53d6","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":8,"name":"\u30d0\u30a4\u30af\u8cb7\u53d6","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":9,"name":"\u30ed\u30fc\u30c9\u30b5\u30fc\u30d3\u30b9\uff08\u8eca\uff09","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},{"id":10,"name":"\u30ed\u30fc\u30c9\u30b5\u30fc\u30d3\u30b9\uff08\u30d0\u30a4\u30af\uff09","created_at":"2021-06-23T01:28:57.000000Z","updated_at":"2021-06-23T01:28:57.000000Z"},
tsx
1// 階層:/app/backend/resources/tsx/app.tsx 2require('./../tsx/views/components/CategoryLists.tsx');
js
1// 階層:/app/backend/webpack.mix.js 2mix.js('resources/js/app.js', 'public/js') 3 .ts('resources/tsx/app.tsx', 'public/js') 4 .sass('resources/sass/app.scss', 'public/css') 5 .react();
tsx
1import React, { useEffect, useState } from 'react'; 2import axios from 'axios'; 3import ReactDOM from 'react-dom'; 4 5// typescript設定 6type Category = { 7 id: number; 8 name: string; 9 created_at: Date; 10 updated_at: Date; 11}; 12 13// React.VFC : 型定義 14const CategoryLists: React.VFC = () => { 15 16 // useStateを作成 17 const [categories, setCategories] = useState<Category[]>([]) 18 19 // カテゴリーAPIを取得する 20 const getCategories = async () => { 21 const { data } = await axios.get<Category[]>('api/categories'); 22 console.log(data); // ← なぜか無限レンダリングしてしまう 23 setCategories(data); 24 } 25 26 // getCategoriesを出力する 27 useEffect(() => { 28 getCategories() 29 }) 30 31 // 本文 32 return ( 33 // 出力 34 <ul className="c-input__lists"> 35 { categories.map(category => { // ← 上手く表示されない 36 <li key={category.id} className="c-input__list"> 37 <input type="checkbox" /> 38 <label>{category.name}</label> 39 </li> 40 }) } 41 <li className="c-input__list"> 42 <input type="checkbox"/> 43 <label>サンプル</label> 44 </li> 45 <li className="c-input__list"> 46 <input type="checkbox"/> 47 <label>サンプル</label> 48 </li> 49 <li className="c-input__list"> 50 <input type="checkbox"/> 51 <label>サンプル</label> 52 </li> 53 <li className="c-input__list"> 54 <input type="checkbox"/> 55 <label>サンプル</label> 56 </li> 57 </ul> 58 ); 59} 60 61if (document.getElementById('categoryLists')) { 62 ReactDOM.render(<CategoryLists />, document.getElementById('categoryLists')); 63}
参考
以下のコードを参考に記述しました。
コピーしているので、問題ないと認識しているのですが、なぜかmapメソッドで出力されません。
https://www.youtube.com/watch?v=bqctWoscPgE&t=195s
補足情報(FW/ツールのバージョンなど)
typescript@4.3.4 Laravel Framework 8.48.0 @types/react 17.0.11 react 17.0.2 ts-loader ^9.2.3 typescript ^4.3.4
お力添えいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー