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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

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

Q&A

解決済

2回答

1614閲覧

Javascriptの配列の要素を呼び出す時に発生するエラーを解消したい

solt0723

総合スコア67

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

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

0グッド

1クリップ

投稿2017/04/08 10:41

編集2017/04/08 15:54

###前提・実現したいこと
RailsアプリケーションにReactを導入して開発をしています。
Reactの子コンポーネントにおいて、親から渡ってきた配列オブジェクトの要素を取り出そうとすると
発生するエラーを解消したいと思っています。

Rails 4.2.2
Ruby 2.0.0
React
Ajax
で開発をしています。

###実装がうまくいかない箇所

protocolオブジェクトの中に、配列が入っていて、その要素を取り出したいのですが
下記のコードのthis.props.protocol[0].procedureでエラーが発生しています。

var ProtocolItem = React.createClass ({ render: function() { // デバッグ用に表示 console.log("protocol array", this.props.protocol); console.log("protocol array [0]", this.props.protocol[0]); return ( <div className="protocol"> <h2 className="protocolUser">{this.props.protocol[0].procedure}</h2> </div> ); } });

choromeのコンソールでは、console.logのそれぞれで次のスクショのように値が表示されています。

イメージ説明

最終的には次のようなコードに改修し、protocol配列のprocedureを
リスト形式で表示したいと思っています。

var ProtocolItem = React.createClass ({ render: function() { // デバッグ用に表示 console.log("protocol array", this.props.protocol); console.log("protocol array [0]", this.props.protocol[0]); console.log("protocol の要素(procedure)", this.props.protocol[0]); // for文の中で、protocolオブジェクトのprocedure要素を順に表示 for ( i = 0; i < this.props.protocol.length; i++) { return ( <div className="protocol"> <h2 className="protocolUser">{this.props.protocol[i].procedure}</h2> </div> ); } } });

エラーとしては、下記のエラーが発生しています。
console.logでprotocolの中身を確認する限りでは、protocolはprocedureの要素を持っているはずなのに
エラーが発生する理由が理解できずにいます。

Uncaught TypeError: Cannot read property 'procedure' of undefined

###試してみたこと
要素の取り出し方が正しくないのかと思い、
this.props.protocol[0][procedure]
this.props.protocol[0]['procedure']
など試してみたのですが、いずれもエラーは解消されませんでした。

追加で必要な情報などあれば、言っていただけるとありがたいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ループ処理はfor文を使うより、mapを使ったほうがいいですよ。
自分だったらこう書きますかね。

これでいけませんか?

Javascript

1for ( i = 0; i < this.props.protocol.length; i++) { 2 return ( 3 <div className="protocol"> 4 <h2 className="protocolUser">{this.props.protocol[i].procedure}</h2> 5 </div> 6 ); 7 } 8 9↓↓↓↓↓↓↓↓ 10 11this.props.protocol.map((val) => { 12 return( 13 <div className="protocol"> 14 <h2 className="protocolUser">{val.procedure}</h2> 15 </div> 16 ) 17}); 18

投稿2017/04/10 18:13

chieeeeno

総合スコア217

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

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

solt0723

2017/04/22 10:32

回答ありがとうございます! 遅くなっていしまい申し訳ありません、! 回答いただいたように、mapを使ってデータを取り出すことができました。 ありがとうございます。 ``` render: function() { // protocolsの中身をmapして、リスト形式で表示 var protocolItems = this.state.protocols.map(function(protocol) { console.log('map protocol', protocol.procedure); return ( <div className="protocol"> <h2 className="protocolUser">{protocol.procedure}</h2> </div> ); }); ```
guest

0

HTML

1<h2 className="protocolUser">{this.props.protocol[i].procedure}</h2>

Reactはよく分からないのですが、このレンダラの中のthisは想定されているものを返してますか? レンダラの中ではスコープが違うということはありえませんか?

たとえば、このように書くと解決したりしませんか?

javascript

1var ProtocolItem = React.createClass ({ 2 render: function() { 3 // ... 4 }.bind(this); 5});

投稿2017/04/10 11:37

Lhankor_Mhy

総合スコア36074

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

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

Lhankor_Mhy

2017/04/10 11:38

あ、後段のコードでは解決しなさそうな気がしてきました。
solt0723

2017/04/22 10:34

ご回答ありがとうございます! 遅くなり申し訳ありません、、 thisは正常に取れているようで、.bind(this)の方法も試してみましたが、解決はしませんでした。 最終的には、別の方の回答でいただいたようにmapを使うことで解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問