2016-09-21 16 views
0

私はLikesと呼ばれるステートレス機能コンポーネントを持っています。その中には、handleLikePlus()handleLikeMinus()という2つの機能があります。 Likesコンポーネント内の上向き矢印または下向き矢印をクリックすると、それぞれのそれぞれをトリガーしたいと思います。ここでリアクションでonClick関数を呼び出せません

は私のコンポーネント

function Likes({likes}) { 
    function handleLikePlus() { 
     this.setState({ 
     likes: this.state.likes + 1 
     }); 
    }; 
    function handleLikeMinus() { 
     this.setState({ 
     likes: this.state.likes - 1 
     }); 
    }; 
    return (
     <div> 
     <div onClick={this.handleLikePlus()}> 
      <h5><i className="fa fa-arrow-up" aria-hidden="true"></i></h5> 
     </div> 
     <div> 
      <h4>{likes}</h4> 
     </div> 
     <div onClick={this.handleLikeMinus()}> 
      <h5><i className="fa fa-arrow-down" aria-hidden="true"></i></h5> 
     </div> 
     </div> 
    ); 
} 

マイコンソールリターンのコードです:

私は間違っているつもりです
Uncaught TypeError: cannot read property 'handleLikePlus' of undefined 

?それは単純な構文エラーですか?あるいは私は間違った方法で関数を呼びますか?

ありがとうございます。

+2

ステートレスの全ポイントは「この」を意味しません。確かに 'thie.state'はなく、特に' this.setState'はありません。ステートレスな権利?それらの関数を親から渡します。 onClick = {handLikePlus()}ではなく、 'onClick = {handleLikePlus}'でなければなりません。関数参照を渡しているのではなく、関数を呼び出す結果ではありません。 – azium

+0

ああ、それは愚かな... 。名前の手掛かりは、そう? :)それで、解決策は親から渡します。また、関数** call **とは対照的に、関数** reference **であることを知るのに非常に便利です。ありがとう! – Paulos3000

答えて

1

ステートレスコンポーネントを使用していますが、引き続きsetState()を使用しようとすると動作しません。状態が必要な場合は、通常のコンポーネントを使用してください。

また、thisが機能の中にないため、エラーが読み込まれると、からhandleLikePlusにアクセスできません。

+0

上記のように...ありがとう:) – Paulos3000

関連する問題