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

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

新規登録して質問してみよう
ただいま回答率
85.48%
React.js

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

Q&A

解決済

1回答

1797閲覧

Reactでmapでエラーが出てしまう

Shmupeiii

総合スコア105

React.js

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

0グッド

0クリップ

投稿2022/05/07 06:34

編集2022/05/07 06:39

公開URL
https://react-chart-72e6c.web.app/
github
https://github.com/takoyan33/react-chart-app

こちらを参考にして、
https://zenn.dev/shimapon3/articles/13e3d4b147742c
APIの練習として、Rechart.jsを使ったサイトを作りたいと考えています。
その練習としてmapで都道府県名を表示させたいと考えているのですが、下記のエラーが出ました。
イメージ説明

Uncaught TypeError: prefectures.map is not a function at Main (Main.jsx:23:1) at renderWithHooks (react-dom.development.js:16175:1) at mountIndeterminateComponent (react-dom.development.js:20913:1) at beginWork (react-dom.development.js:22416:1) at HTMLUnknownElement.callCallback (react-dom.development.js:4161:1) at Object.invokeGuardedCallbackDev (react-dom.development.js:4210:1) at invokeGuardedCallback (react-dom.development.js:4274:1) at beginWork$1 (react-dom.development.js:27405:1) at performUnitOfWork (react-dom.development.js:26513:1) at workLoopSync (react-dom.development.js:26422:1)

console.log(results.data); をすればデータを取れているので、原因が分かっていません。
分かる方がいればよろしくお願いします。

JavaScript

1import React, { useEffect, useState } from "react"; 2import axios from "axios"; 3// import Chart from "./Chart"; 4// import CheckField from "./CheckField"; 5 6const Main = () => { 7 const [prefectures, setPrefectures] = useState(""); 8 9 useEffect(() => { 10 axios 11 .get("https://opendata.resas-portal.go.jp/api/v1/prefectures", { 12 headers: { "X-API-KEY": process.env.REACT_APP_API_KEY }, 13 }) 14 .then((results) => { 15 setPrefectures(results.data); 16 console.log(results.data); 17 }) 18 .catch((error) => {}); 19 }, []); 20 21 return ( 22 <div> 23 <h2>都道府県</h2> 24 { 25 prefectures.map((prefecture) => <li>{ prefecture }</li>) 26 } 27 <h2>人口推移グラフ</h2> 28 </div> 29 ); 30}; 31
#console.logの結果 export default Main; console.logの結果 Object message: null result: Array(47) 0: prefCode: 1 prefName: "北海道" [[Prototype]]: Object 1: prefCode: 2 prefName: "青森県" [[Prototype]]: Object 2: prefCode: 3 prefName: "岩手県" [[Prototype]]: Object 3: prefCode: 4 prefName: "宮城県" [[Prototype]]: Object 4: prefCode: 5 prefName: "秋田県" [[Prototype]]: Object 5: prefCode: 6 prefName: "山形県" [[Prototype]]: Object 6: prefCode: 7 prefName: "福島県" [[Prototype]]: Object 7: prefCode: 8 prefName: "茨城県" [[Prototype]]: Object 8: prefCode: 9 prefName: "栃木県" [[Prototype]]: Object 9: prefCode: 10 prefName: "群馬県" [[Prototype]]: Object 10: prefCode: 11 prefName: "埼玉県" [[Prototype]]: Object 11: prefCode: 12 prefName: "千葉県" [[Prototype]]: Object 12: prefCode: 13 prefName: "東京都" [[Prototype]]: Object

これが47県分ありました。

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

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

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

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

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

hoshi-takanori

2022/05/07 06:38

prefectures の初期値 "" は配列ではなく、map メソッドを持たないのでは…。
Shmupeiii

2022/05/07 06:45

コメントありがとうございます。 = useState(""); が間違っているという感じでしょうか。(的外れかもしれませんが。) よろしくお願いします。
hoshi-takanori

2022/05/07 21:59

prefectures の初期値を空の配列 [] にすれば、配列なので map は使えます。 const [prefectures, setPrefectures] = useState([]); (ただ、それだと何も表示されないので、prefectures の値をチェックして空なら「ロード中」とか表示した方が親切な気はしますが。)
guest

回答1

0

ベストアンサー

console.log(results.data); をすればデータを取れているので

通信は非同期処理なので、最初の描画にデータは間に合わず、useStateに指定した初期値がそのまま使われます。""(文字列)にmapメソッドはありません。

投稿2022/05/07 07:03

maisumakun

総合スコア145184

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

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

Shmupeiii

2022/05/07 07:21

コメントありがとうございます。 承知しました。 もしこの場合で、mapで表示したい場合にはどのような書き方をすれば良いでしょうか。 よろしくお願いします。
maisumakun

2022/05/07 09:05

> mapで表示したい場合には 「データがない場合は表示させない(mapを呼ばない)」という選択肢もあります。
Shmupeiii

2022/05/07 11:31

承知しました。その場合だとif文などで分岐する感じでしょうか。 よろしくお願いします。
maisumakun

2022/05/07 11:58

JSXの中に書けるのは「式」なので、三項演算子(? :)や論理演算子(&&や||)のショートサーキットで制御します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問