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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

API

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

React.js

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

Q&A

解決済

1回答

1077閲覧

React+LaravelでAPIによるデータの取得

matsuda1

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

API

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

React.js

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

0グッド

0クリップ

投稿2020/05/19 13:53

前提・実現したいこと

下記URLを参考にAPIによるデータの取得をやっていたのですが、useStateにユーザー情報は入るのですが、その中からidとかを取り出そうとするとundefinedになり取り出せません。
https://reffect.co.jp/laravel/laravel6-react-router#i-3

発生している問題・エラーメッセージ

app.js:70681 レンダリング app.js:70722 undefined app.js:70699 実行中 app.js:70681 レンダリング app.js:70722 undefined app.js:70681 レンダリング app.js:70722 undefined app.js:70706 成功

該当のソースコード

React

1function Profile(props){ 2 console.log("レンダリング"); 3 const [user, setUser] = useState([]); 4 5 useEffect(() => {getUser()},[]) 6 7 const getUser = async () => { 8 console.log("実行中") 9 const response = await axios.get(`/api/user/${props.match.params.username}`); 10 setUser(response.data) 11 console.log("成功"); 12 } 13 console.log(user.id);

試したこと

console.log(user);にしてみると以下のように変わりました。

app.js:70681 レンダリング app.js:70722 [] app.js:70699 実行中 app.js:70681 レンダリング app.js:70722 [{…}]0: {id: 1, screen_name: "@test_user1", name: "TEST1", profile_image: "https://placehold.jp/50x50.png", email: "test1@test.com", …}length: 1__proto__: Array(0) app.js:70706 成功

最初には空配列でその後useEffectが実行され、APIでユーザー情報が取得できるまではわかるのですが、なぜ参考記事ではその中の値が取り出せ、自分の場合は取り出せないのかがわかりません。

補足情報(FW/ツールのバージョンなど)

React/16.2.0
react-dom/16.2.0
axios/0.19

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

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

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

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

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

hoshi-takanori

2020/05/19 16:44

API の結果が User の配列になってるのでは。
matsuda1

2020/05/19 17:33 編集

確認してみたところ、APIの結果が配列になっていました。 元の質問の趣旨とはずれるのですが、この場合配列の中身を取り出す場合には以下のようにmap関数を使ってとりだせたのですが、もっと簡単な方法はありますか? console.log(user.map(item=>item.id)); 以下のコードでは初期値に空配列を設定しているため、エラーが起きました console.log(user[0][0].id);
hoshi-takanori

2020/05/19 18:23 編集

API の結果が配列ということは、User 1 つかも知れないし 3 つかも知れないし 0 個かも知れないってことなので、個数にかかわらず適切な処理を行うという意味では map を使うのが最も簡単な方法かと。 ところで、user[0][0].id だと単なる配列ではなく、配列の配列ってことになりますけど…。
matsuda1

2020/05/20 02:58

API の結果が配列なのでuserは以下のような配列になると思うのですが、違うのですか? [[{id:1,name:”太郎”}]] 違うのであれば、初期値が空配列なので、配列が省略されてこうなるのでしょうか? [{id:1,name:”太郎”}] 質問続きで申し訳ないです。
hoshi-takanori

2020/05/20 03:42

たぶん後者だとは思いますが、実際に API を叩いて結果をご確認ください。
matsuda1

2020/05/20 05:09

結果は後者の配列になっていました。 質問に答えていただきありがとうございました。!
guest

回答1

0

自己解決

APIの結果が配列だったので、以下のようにmap関数で取り出すことで解決しました。

React

1console.log(user.map(item=>item.id));

投稿2020/05/20 05:10

matsuda1

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問