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

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

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

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

JavaScript

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

React.js

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

Q&A

解決済

1回答

3006閲覧

Reactで隣接する要素に値を渡したいのにうまく行かない

Maar

総合スコア48

ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2016/09/30 08:00

編集2016/10/01 07:06

Ajaxで送信した文字列をjsonに変換し、返ってきたデータをリスト表示させようとしていて、CommentFormからCommentBoxまでは渡せたのですが、そこからCommentListに渡そうとしてもうまくいきません、どのようにすればうまく渡すことができるのでしょうか、ご教授いただきたいです。

javascript

1import request from 'superagent' 2import React from 'react' 3import ReactDOM from 'react-dom' 4 5class CommentBox extends React.Component{ 6 constructor(props) { 7 super(props) 8 this.state = {data: []} 9 } 10 loadCommentsFromServer(data){ 11 this.setState(data) 12 } 13 render() { 14 return ( 15 <div className="commentBox"> 16 <h1>Comments</h1> 17 <CommentList data={this.state.data} /> 18 <CommentForm url={this.props.url} onEventCallBack={this.loadCommentsFromServer.bind(this)} /> 19 </div> 20 ) 21 } 22} 23 24class CommentList extends React.Component{ 25 constructor(props) { 26 super(props) 27 } 28 render() { 29 const commentNodes = this.props.data.map( single => { 30 return ( 31 {single} 32 ) 33 }) 34 return ( 35 <div className="commentList"> 36 {commentNodes} 37 </div> 38 ) 39 } 40} 41 42class CommentForm extends React.Component{ 43 constructor(props) { 44 super(props) 45 this.state = {param: []} 46 } 47 handleParamChange(e) { 48 this.setState({param: e.target.value}) 49 } 50 gettingDataByParams(e){ 51 request 52 .get(this.props.url) 53 .query({param:this.state.param}) 54 .end(( err, res ) => { 55 let data = JSON.parse(res.text) 56 this.props.onEventCallBack(data); 57 }) 58 e.preventDefault() 59 } 60 render() { 61 return ( 62 <form className="commentForm" onSubmit={this.gettingDataByParams.bind(this)} > 63 <input type="text" value={this.state.param} onChange={this.handleParamChange.bind(this)} /> 64 <input type="submit" value="Post" /> 65 </form> 66 ) 67 } 68} 69 70ReactDOM.render( <CommentBox url="/test.php" />, document.getElementById('content') )

json

1{ 2 param: [ 3 "hoge", 4 "fuga" 5 ] 6}

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

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

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

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

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

raccy

2016/09/30 10:41 編集

想定されているJSONのデータはどんな感じの物なのでしょうか?こういうデータが渡されるというサンプルは提示できますか?CommentListに渡すときにうまく噛み合ってないような気がします。
Maar

2016/10/01 07:10

ありがとうございます、カンマ区切りの文字列をこのようなJSONで返しています。 loadCommentsFromServerの所でconsole.logをするとデータは取れているのですが、CommentListのrenderの時にはthis.props.dataの中身が入っていません。
guest

回答1

0

ベストアンサー

CommentBoxからCommentListへのデータの受け渡しは、CommentBoxのthis.state.dataをCommentListのthis.props.dataとして渡しています。ここまでは良いですね。さて、

JavaScript

1loadCommentsFromServer(data){ 2 this.setState(data) 3}

の部分で、関数の引数であるdata{param: ["hoge", "fuga"]}のようなObjectです。これがsetStateに渡されますので、this.stateは__以前のものとマージ__して{data: [], param: ["hoge", "fuga"]}となります。そう、**これだとthis.state.data[]のままで変わっていません!**ということで、この部分を変える必要があります。

["hoge", "fuga"]という形で渡したいのであれば、

JavaScript

1loadCommentsFromServer(data){ 2 this.setState({data: data.param}) 3}

{param: ["hoge", "fuga"]}という形で渡したいのであれば、

JavaScript

1loadCommentsFromServer(data){ 2 this.setState({data: data}) 3}

とすればいいでしょう。

投稿2016/10/01 10:43

raccy

総合スコア21735

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

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

Maar

2016/10/03 02:22

loadCommentsFromServer(data){ this.setState({data: data.param}) } こちらのように変更した後、CommentListの render() 内でconsole.log(this.props)をしてみてもObject {data: Array[0]}と出てしまい、やはり渡せていないようでした。。
Maar

2016/10/03 02:39

すみません、渡せていました。。 自分の確認ミスで、今見たところ無事CommentListの render() 内でconsole.log(this.props)でデータが確認できました。ありがとうございます、とても助かりました! またよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問