##Reactで親のメソッドを孫までpropsで渡しでエラー
Reactで親のメソッドを孫までpropsで渡してsubmitボタンをクリックすると、子のコンポーネントのrenderメソッドに記載している孫のコンポーネントの記述箇所で下記のようなエラーになってしまいます。エラーになってしまう
TypeError: _this2.props.itemsSearch is not a function
コンパイルはできている
####エラー箇所
onSubmit
src/components/Header/Header.js:32
29 | <header className='Header'>
30 | <Logo/>
31 | <LogoutButton/>
32 | <SearchForm onSubmit={keyword =>this.props.itemsSearch(keyword)}/
| ^ 33 | <AddButton/>
34 | </header>
35 |
####ソースコード
親コンポーネント:App.js
~~~省略~~~ class App extends Component { ~~~省略~~~ itemsSearch(keyword){ axios({ method: 'GET', url: endPoint, params: {name: keyword}, headers: { 'Content-type': 'application/json', } }).then((results) => { console.log(results); this.setState({data: results.data}); }); } render() { const items = this.state.data.map((item) => { return <Item key={item.id} id={item.id} name={item.name} description={item.description} price={item.price} image={item.image} created_at={item.created_at} updated_at={item.updated_at}/> }); return ( <div className="App"> <Header onSubmit={keyword => this.itemsSearch(keyword)}/> <div>{items}</div> </div> ); } }
子コンポーネント:Header.js
~~~省略~~~ class Header extends Component{ constructor(props) { super(props); this.state = { } } render() { return ( <header className='Header'> <Logo/> <LogoutButton/> <SearchForm onSubmit={keyword =>this.props.itemsSearch(keyword)}/> <AddButton/> </header> ); } }
孫コンポーネント:SearchForm,js
import React, {Component} from 'react'; import SearchButton from './SearchButton'; class SearchForm extends Component { constructor(props) { super(props); this.state = { keyword: '', } } inputChange(event) { this.setState({keyword: event.target.value}); } itemSearch(event){ event.preventDefault(); this.props.onSubmit(this.state.keyword); } render() { return ( <form onSubmit={event => this.itemSearch(event)}> <input type='text' value={this.state.keyword} onChange={event => this.inputChange(event)} /> <SearchButton/> </form> ) } } export default SearchForm;
####確認したこと
・関数名の記述が間違っていないことを確認。
・孫コンポーネントではなく子コンポーネントで実行するとエラーにならないことを確認
・コンパイルはうまくいっていることを確認
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/24 13:05
2019/03/24 13:25