2016-07-29 16 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> 
     ); 
    } 
} 

Buttonをクリックしても何も起こりません。 ボタンには機能がなく、index.jsに空の機能が追加されました。なぜIDK?あなたは矢印機能((e) => { })を削除必要がある。この場合setState関数を呼び出す方法onClick ES6方法

+0

このスニペットを試してみてください。 ' – feeeper

+0

@ feeeper-もしそうなら、関数は無限再帰(すなわち、ブラウザがクラッシュするまで)、しかし私のボタンは機能します。 –

答えて

4

を説明してくださいあなたはconstructorthisをバインドするので、それは、ここでは必要ありません。また、onLike変更this.state.like++this.state.like + 1にあなたが状態

を変異させることができないので、
<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

私はあなたがを起動していないと思いますは、onClickに渡している公式関数で機能します。

これを試してみてください:

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

はonLike後()に注意してください。

+1

コードに '()'を追加した後、ブラウザがクラッシュするまでIMOは無限に再帰します。IMはsetStateがDOMの変更を見るために自分自身を更新し、関数が再帰状態にあるので、私のクロックレートに依存します。 –

+0

はい、私は、 'setState'の動作がシンクロナスでなく、無限再帰のソースになる可能性があるので、状態を設定するときにその自動インクリメント演算子を使用することは避けています。 https://facebook.github.io/react /docs/component-api.html#setstate –

関連する問題