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

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

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

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

React.js

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

Q&A

解決済

2回答

2065閲覧

reactでデバッグする方法をご教示願います。

pokemonta

総合スコア170

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

React.js

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

0グッド

0クリップ

投稿2020/10/01 03:16

JSONデータをパースして画面に表示するプログラムを作成しています。

getリクエストが成功して以下のレスポンスを受けることに成功しましたが画面に
レンダリングすることができません。(ボタンを押下してもage、nameが表示されません。)

対応方法をご教示頂けないでしょうか?
さらにconsole.logを所々に入れていますが、VScode上に表示されません。
これはどこを見れば内容を確認できるのでしょうか?
また、VScode上でブレークポイントを置いて、ボタンを押下しても
実行結果を止めることができません。どのようにすればデバックができるのでしょうか?

以上3点をご教示頂けないでしょうか

json

1{"body": "[{\"age\": \"25\", \"name\": \"tanaka\"}, {\"age\": \"33\", \"name\": \"yoshida\"}]"}

jsx

1import React from "react"; 2import ReactDOM, { render } from "react-dom"; 3import axios from "axios"; 4 5class App extends React.Component { 6 constructor() { 7 super(); 8 this.state = { body: [] }; 9 } 10 11 memberList(list) { 12 const memberList = list.map((body, index) => { 13 return ( 14 <li> 15 {body.name} {body.age} 16 </li> 17 ); 18 }); 19 20 return <ul>{memberList}</ul>; 21 } 22 23 getProfile = async () => { 24 this.country = "japan"; 25 try { 26 const result = await axios.get(`https://***/${this.country}` 27 ); 28 console.log(result); 29 this.setState(result.data); 30 } catch (error) { 31 console.log("error!!"); 32 } 33 }; 34 35 render() { 36 console.log(this.state.body); 37 return ( 38 <div> 39 <button onClick={() => this.getProfile()}>Get Json</button> 40 {this.memberList(this.state.body)} 41 </div> 42 ); 43 } 44} 45render(<App />, document.getElementById("root")); 46export default App;

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

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

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

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

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

guest

回答2

0

ベストアンサー

さらにconsole.logを所々に入れていますが、VScode上に表示されません。

VSCodeには表示されないと思います。
実際に画面を表示しているブラウザでF12を押すと開発者モードになり、そこのコンソールに諸々出力されていると思います。

どのようにすればデバックができるのでしょうか?

これについてはmaisumakun様と同じようにReact Developer Toolsをおすすめします。
他にも開発者用ツールはあるかと思いますが、知名度・機能的にもこれがベストかなと。

ボタンを押下してもage、nameが表示されません。

this.setStateを下記のようにすれば表示されるのではないでしょうか?

javascript

1this.setState({body : result.data});

投稿2020/10/01 04:03

nekoniki

総合スコア2411

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

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

pokemonta

2020/10/01 05:02

App.js:12 Uncaught TypeError: list.map is not a function で怒られます。。。
nekoniki

2020/10/01 05:15

失礼しました。result.data内に既に`body`プロパティは含まれていましたね。 では、setState時に this.setState(JSON.parse(result.data)) とされるのはどうでしょう? もしくは {body.name} {body.age} の箇所を {body["name"]} {body["age"]} に変えても動くかなと思います。
pokemonta

2020/10/01 05:29

もうちょっとの気がしますが。。まだエラーでます App.js:29 {data: {…}, status: 200, statusText: "", headers: {…}, config: {…}, …}config: {url: "https://XXXX", method: "get", headers: {…}, transformRequest: Array(1), transformResponse: Array(1), …}adapter: ƒ xhrAdapter(config)data: undefinedheaders: {Accept: "application/json, text/plain, */*"}maxBodyLength: -1maxContentLength: -1method: "get"timeout: Objectdata: {statusCode: 200, headers: {…}, body: "[{"age": "25", "name": "tanaka"}]"}headers: {content-length: "345", content-type: "application/json"} App.js:34 error!!
pokemonta

2020/10/01 05:36

this.setState(result.data);に戻したら TypeError: list.map is not a functionが出ますので JSONに変換するのは正解だとは思いますが。。。
pokemonta

2020/10/01 05:38

this.setState(JSON.parse(result.data)) で構文エラーが起きているようです SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) at App.getProfile (App.js:31)
nekoniki

2020/10/01 05:45

では this.setState({body : JSON.parse(result.data.body)}) ではどうですか?
pokemonta

2020/10/01 05:51

あ、いけました。何が原因だったのでしょうか? Chromeのコンソール上には、以下のようにbody:が2回出力されていましたので API側の問題と考えていました。 App.js:32 {statusCode: 200, headers: {…}, body: "[{"age": "25", "name": "tanaka"}]"}body: "[{"age": "25", "name": "tanaka"}, {"age": "33", "name": "yoshida"}]"
pokemonta

2020/10/01 05:57

↓警告が出るみたいですがageかnameはユニークにしなてきなものかと思います index.js:1 Warning: Each child in a list should have a unique "key" prop.
nekoniki

2020/10/01 06:01

結果的にbodyをJSON.parseする必要があったわけですが、 {"body": "[{\"age\": \"25\", \"name\": \"tanaka\"}, {\"age\": \"33\", \"name\": \"yoshida\"}]"} を丸ごと指定するとフォーマットがおかしいようです。 "[{\"age\": \"25\", \"name\": \"tanaka\"}, {\"age\": \"33\", \"name\": \"yoshida\"}]" をフォーマットするのが正なので、先のコメントのようにしました。 警告ですが、ご認識の通りで、<li>を <li key={"li_" + index}> のようにすれば問題ないかと思います。
pokemonta

2020/10/01 06:09

警告もなくなりました。 JSONフォーマット自体も問題ないと判断したいと思います。 お忙しいところ色々教えて頂きありがとうございました。
pokemonta

2020/10/01 06:12

React Developer Toolsを使いこなせていないのが 全ての元凶だと思います (ぜんぜんstateの値を確認できていません)
guest

0

React Developer Tools(Chrome用Firefox用)は試してみましたか?

コンポーネントごとにpropやstateの値を確認できます。

投稿2020/10/01 03:23

maisumakun

総合スコア146018

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

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

pokemonta

2020/10/01 04:20

あ、そうゆうものがあるんですね。。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問