2017-06-17 7 views
0

子コンポーネントとしてRoundedButtonコンポーネントを作成しました。私はTypeError:this.props.clickitemは関数ではありません

class App extends Component { 
    constructor(props) { 
    super(props); 
    this.state = {}; 
    this.clickitem = this.clickitem.bind(this); 
    } 

    clickitem(buttonText) { 
    console.log(buttonText); 
    } 

    render() { 
    return (
     <div className="AppTitle"> 
     <b>Score:</b> 
     <div> 
      <RoundedButton text="Rock" clickitem={this.clickitem} /> 
      <RoundedButton text="Paper" /> 
      <RoundedButton text="Scissors" /> 
     </div> 
     </div> 
    ); 
    } 
} 

export default App; 

は App.js

_handleButtonClick(item) { 
    this.props.clickitem(item.buttonText); 
    } 

コンパイラはエラーをスロー

TypeError: this.props.clickitem is not a function 
RoundedButton._handleButtonClick 
D:\ReactJS\xxx\src\RoundedButton.js:8 
    5 | state = {}; 
    6 | 
    7 | _handleButtonClick(item) { 
> 8 | this.props.clickitem(item.buttonText); 
    9 | } 
    10 | 
    11 | render() { 
View compiled 

RoundedButton.js

import React, { Component } from "react"; 
import "./App.css"; 

class RoundedButton extends Component { 
    state = {}; 

    _handleButtonClick(item) { 
    this.props.clickitem(item.buttonText); 
    } 

    render() { 
    let buttonText = this.props.text; 
    return (
     <button 
     type="button" 
     className="Button" 
     onClick={this._handleButtonClick.bind(this, { buttonText })} 
     > 
     {buttonText} 
     </button> 
    ); 
    } 
} 

export default RoundedButton; 

を使用して親コンポーネントに誰をクリックボタンの値をすることができ、送信しています私を助けて私は間違っている?

+0

Imが推測他の二つのRoundedButtonのコンポーネントにclickitem小道具を置くことを忘れているかもしれませんが、あなたがそれだと思うところから_handleButtonClick'が起動されていない '存在しないか、またはいくつかのコードがあります。 –

+0

あなたは 'App.js'で' this.tap.bind(this) 'を試しましたか? –

+0

'propTypes'を使って、間違った' clickitem'を渡すコンポーネントを調べます。 https://www.npmjs.com/package/prop-types –

答えて

1

コードは機能します。しかし、テキストが "rocks"に設定されたRoundedButtonの場合。あなたは

class RoundedButton extends React.Component { 
 
    state = {}; 
 

 
    _handleButtonClick(item) { 
 
    this.props.clickitem(item.buttonText); 
 
    } 
 

 
    render() { 
 
    let buttonText = this.props.text; 
 
    return (
 
     <button 
 
     type="button" 
 
     className="Button" 
 
     onClick={this._handleButtonClick.bind(this, { buttonText })} 
 
     > 
 
     {buttonText} 
 
     </button> 
 
    ); 
 
    } 
 
} 
 

 
class App extends React.Component { 
 
    constructor(props) { 
 
    super(props); 
 
    this.state = {}; 
 
    this.clickitem = this.clickitem.bind(this); 
 
    } 
 

 
    clickitem(buttonText) { 
 
    console.log(buttonText); 
 
    } 
 

 
    render() { 
 
    return (
 
     <div className="AppTitle"> 
 
     <b>Score:</b> 
 
     <div> 
 
      <RoundedButton text="Rock" clickitem={this.clickitem} /> 
 
      <RoundedButton text="Paper" clickitem={this.clickitem}/> 
 
      <RoundedButton text="Scissors" clickitem={this.clickitem}/> 
 
     </div> 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 
ReactDOM.render(<App />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="app"></div>

関連する問題