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

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

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

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

React.js

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

Q&A

解決済

1回答

2577閲覧

親から子へのpropsの受け渡し

NinnJinn

総合スコア18

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2018/12/22 10:21

編集2018/12/22 11:36

前提・実現したいこと

親コンポーネントで選択されたwordsを子コンポーネントで使いたいのですが、
propsの受け渡しができていないみたいで、
どの様にコードを書けばいいかわかりません。
イメージ説明
検索ボックス+検索ボタンが子コンポーネントとなっており、
それより下は親コンポーネントとしております。
にらを選択すれば検索ボックスの左横に<span>にら</span>が追加されるようにしたいです。

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

C:\Users\matus\GATSBY\Serch\src\components\searchbar.js 5:3 warning Useless constructor no-useless-constructor 11:9 error 'props' is not defined no-undef

該当のソースコード

javascript

1import React from "react" 2import "./wordlist.css" 3import Searchbar from './searchbar' 4 5const vegetables = [ 6 '大根', '玉ねぎ', 'キャベツ', '白菜', '人参', 'トマト', 7 'きゅうり', 'かぼちゃ', 'レタス', 'もやし', 8 'ねぎ','ブロッコリー','ピーマン','ごぼう','なす','かぶ','れんこん', 9 'ほうれんそう','小松菜','ちんげん菜','じゃがいも','にら' 10]; 11 12class Wordlist extends React.Component { 13constructor(props){ 14 super(props); 15 const words=[{ 16 },] 17 this.state={ 18 words:words, 19}; 20this.onWordSelected=this.onWordSelected.bind(this) 21} 22 onWordSelected(e){ 23 e.preventDefault(); 24 const words = this.state.words.slice() 25 console.log(e.target.innerText) 26 words.push(e.target.innerText 27 ) 28 this.setState({words}) 29 }; 30 31 render() { 32 return ( 33 <div className="wordfont"> 34 <Searchbar data={this.state.words} /> 35 {vegetables.map(word => 36 <span 37 key={word} 38 onClick={this.onWordSelected.bind(this)}> 39 {word} 40 </span>) 41 } 42 43 </div> 44 ); 45 } 46} 47export default Wordlist
import React from 'react' import './searchbar.css' class Searchbar extends React.Component { constructor(props){ super(props) } render() { return ( <div className="search"> {props.data.map(word => <span key={word}> {word} </span>)} <input type="text" id="searchword" /> <input type="submit" value="検索する" id="searchbutton" onClick={this.search} /> </div> ) } search() { var sword = document.getElementById('searchword').value window.open( 'https://www.google.co.jp/search?q=' + sword + ' inurl:/recipe/ site:cookpad.com' ) } } export default Searchbar

試したこと

const Searchbar = (props) =>など
{this.props.data.map(word =>
<span key={word}>
{word}
</span>)}

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

Gatsbyというstatic site generatorを使っています。
Reactで動いておりimportしているためpropsなども使えると思うのですが。

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1class Searchbar extends React.Component { 2 constructor(props){ 3 super(props) 4 } 5 render() { 6 return ( 7 <div className="search"> 8 {props.data.map(word => 9 //↑単なるpropsではエラー

クラスコンポーネントの場合、this.propsとする必要があります。

投稿2018/12/22 10:50

maisumakun

総合スコア145183

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

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

NinnJinn

2018/12/22 12:16

前回に引き続きご回答いただきありがとうございます。 別のエラーが出てしまったため{this.props.data.map(.....}の部分を削除し 以下のようにconsole.log(this.props.data)としてみたところ Cannot read property 'props' of undefined とエラーが出てしまいました。 search() { var sword = document.getElementById('searchword').value window.open( 'https://www.google.co.jp/search?q=' + sword + ' inurl:/recipe/ site:cookpad.com' ) console.log(this.props.data) } } export default Searchbar
maisumakun

2018/12/22 13:09

onclick={this.search}と関数だけ渡した結果、thisが分離してしまいます。 以下のどちらかの方法をとってください。 ・コンストラクタで「this.search = this.search.bind(this);」と事前にbindしておく ・search = () =>{...} という、プロパティ定義+Arrow Functionで定義する
NinnJinn

2019/01/05 07:02

ありがとうございます。コンストラクタでbindしたところ動くようになりました。 本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問