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

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

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

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

React.js

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

Q&A

解決済

1回答

6380閲覧

Reactで配列にpushしたオブジェクトを描画したいのですが、うまく行きません

ahaha0807_alg

総合スコア10

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2016/06/08 07:12

###前提・実現したいこと
連想配列のテンプレートに新しいデータを代入し、代入後のデータを配列の中にpushする

その連想配列を元にReactで定義したテンプレートにデータを当てて描画する

###発生している問題

配列内すべての要素に同じデータが入っていることになり、すでに描画されたデータも入力した値に書き換わってしまいます

###該当のソースコード

javascript

1var cnt = 0; 2var content = { 3 link : "", 4 title : "", 5 id : 0, 6 time : "" 7}; 8var contentsList = []; 9var test = () => { 10 content['title'] = document.querySelector('#input1').value; 11 content['link'] = document.querySelector('#input2').value; 12 content['id'] = cnt++; 13// 作ったデータをプッシュする 14 contentsList.push(content); 15// 描画する 16 ReactDOM.render( 17 <ContentsList contentsList={contentsList} />, 18 document.querySelector('#container') 19 ); 20} 21 22const ContentsList = props => { //コンテンツリストコンポーネント定義 23 return( 24 <ul className="contents"> 25 { 26 props.contentsList.map((content, index) => {<Content content={content} index={index} />}); 27 } 28 </ul> 29 ) 30} 31 32const Content = props => { //コンテンツコンポーネント定義 33 var content = props.content; 34 return ( 35 <li id={"content_" + (props.index)} className="content"> 36 <ContentLink link={content.link} index={props.index} /> 37 <br /> 38 <ContentTitle title={content.title} index={props.index} /> 39 <ContentTime time={props.time} index={props.index} /> 40 <ContentNumber index={props.index} /> 41 </li> 42 ); 43} 44 45// それ以下のコンポーネントは省略します 46

###試したこと

  • console.logでcontentListの要素のなかみを確認しましたが、すべて同じid,titleで、inputから新たにデータを入力するたびにすべての要素が同じ値になっていました。

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

html

1 2<script type="text/javascript" src="https://fb.me/JSXTransformer-0.13.3.js"></script> 3<script type="text/javascript" src="https://fb.me/react-15.1.0.js"></script> 4<script type="text/javascript" src="https://fb.me/react-dom-15.1.0.js"></script> 5<script type="text/jsx" src="./main2.jsx"></script>

使っているReactのバージョンです

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

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

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

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

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

guest

回答1

0

ベストアンサー

contentの変数を持ち回している(再利用している)ことが原因かと思われます。
動確はしていませんが、以下のように変更してみるとどうでしょうか。

javascript

1var test = () => { 2 var content = { 3 link : "", 4 title : "", 5 id : 0, 6 time : "" 7 }; // contentの定義場所をtestメソッド内に変更する 8 content['title'] = document.querySelector('#input1').value; 9 content['link'] = document.querySelector('#input2').value; 10 content['id'] = cnt++; 11// 作ったデータをプッシュする 12 contentsList.push(content); 13// 描画する 14 ReactDOM.render( 15 <ContentsList contentsList={contentsList} />, 16 document.querySelector('#container') 17 ); 18}

投稿2016/06/08 07:25

k.tada

総合スコア1679

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

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

ahaha0807_alg

2016/06/08 10:18

ありがとうございます! 無事に実装出来ました!また何かあればよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問