2016-07-29 7 views
1
class BlogPost extends React.Component{ 
    //getInitialState 
    constructor(){ 
     super(); 
     this.onLike = this.onLike.bind(this); 
     this.state = { 
      like :0 
     } 
    } 

    onLike(){ 
     this.setState({ 
      like: this.state.like++ 
     }); 
    } 

    render(){ 
     var postListItem = this.props.postList.map(function(post){ 
      return <li><a href="#"> {post}</a> </li> 
     }); 
     return (
      <div className="blogPost"> 
       <h2>Posts</h2> 
       <ul>{postListItem}</ul> 
       <button onClick={(e) => {this.onLike}}>{this.state.like}</button> 
      </div> 
     ); 
    } 
} 

Beim Klicken auf Button passiert nichts. Es gibt keine Funktion für die Schaltfläche und index.js hat eine leere Funktion hinzugefügt. warum IDK? bitte erklärenSo rufen Sie die setState-Funktion onClick ES6 auf

+0

Versuchen Sie, Snippet ' {this.onLike()}}> {this.state.like}' – feeeper

+0

@ feeeper- wenn ich dies tun, wird die Funktion in unendliche Rekursion gehen (dh) [bis der Browser abstürzt], aber mein Button funktioniert. –

Antwort

4

In diesem Fall Sie Pfeil Funktion entfernen müssen ((e) => { }), ist es nicht notwendig ist, hier, weil Sie this in constructor binden., auch innerhalb onLike Änderung this.state.like++-this.state.like + 1, weil Sie nicht Staat mutieren kann

<button onClick={ this.onLike }>{this.state.like}</button> 

class BlogPost extends React.Component{ 
 
    constructor(){ 
 
    super(); 
 
    this.onLike = this.onLike.bind(this); 
 
    
 
    this.state = { 
 
     like: 0 
 
    } 
 
    } 
 

 
    onLike(){ 
 
    this.setState({ 
 
     like: this.state.like + 1 
 
    }); 
 
    } 
 

 
    render(){ 
 
    var postListItem = this.props.postList.map(function(post){ 
 
     return <li><a href="#"> {post}</a> </li> 
 
    }); 
 
     
 
    return (
 
     <div className="blogPost"> 
 
     <h2>Posts</h2> 
 
     <ul>{ postListItem }</ul> 
 
     <button onClick={ this.onLike }>{this.state.like}</button> 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 

 
ReactDOM.render(<BlogPost postList={ [] } />, document.getElementById('container'));
<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="container"></div>

0

ich glaube, du bist nicht dieAufrufFunktion in der anonymen Funktion, die Sie an onClick übergeben.

Versuchen Sie folgendes:

<button onClick={(e) => {this.onLike()}}>{this.state.like}</button> 

Hinweis die () nach onLike.

+1

nach dem Hinzufügen von '()' zu dem Code, geht es in unendliche Rekursion, dh bis der Browser abstürzt, IMO ist, weil als setState aktualisiert sich zu sehen, jede Änderung in DOM und Funktion ist im Rekursionsstatus, meine wie in einer Sekunde wird um 500 sein , abhängig von meiner Taktrate. –

+0

Ja, ich würde es definitiv vermeiden, diesen automatischen Inkrement-Operator zu verwenden, wenn der Status gesetzt wird, da 'setState' nicht synchron ist und die Quelle Ihrer unendlichen Rekursion https://facebook.github.io/react sein könnte /docs/component-api.html#setstate –