2017-06-17 3 views
0

Ich habe RoundedButton Komponente als eine untergeordnete Komponente erstellt. Ich sende Klick-Taste Wert in übergeordnete Komponente mitTypeError: this.props.clickitem ist keine Funktion

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

Compiler wirft einen Fehler

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; 

App.js

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; 

Kann jemand hilf mir was Ich mache falsch?

+0

Im raten dort zu setzen ist ein Code fehlt oder '_handleButtonClick' nicht aus aufgerufen wird, wo Sie denken, es ist. –

+0

hast du 'this.tap.bind (this)' in 'App.js' versucht? –

+0

Verwenden Sie 'propTypes', um zu prüfen, welche Komponente falsches' Klick-Element 'liefert. https://www.npmjs.com/package/prop-types –

Antwort

1

Ihr Code funktioniert. Allerdings für den RoundedButton mit dem Text auf "rockt". Aber Sie haben vielleicht vergessen clickitem Requisiten auf den beiden anderen RoundedButton Komponenten

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>