2017-02-07 17 views
1

私は3つの異なる関数を書き出すことなくこれらの要素のそれぞれにクラス名を追加するonClickイベントを作成しようとしています。ただし、イベントがクリックされると、イベントは3つすべてで発生します。クリックするとonClickだけが機能するように、これを変更するにはどうすればよいですか?複数のdivのonClickイベントに反応します

const userVote = React.createClass({ 

    getInitialState: function() { 
     return { 
      condition: false 
     } 
     }, 
     handleClick: function() { 
     this.setState({ 
      condition: !this.state.condition 
     }); 
     }, 


    render() { 
     return(

       <div onClick={this.handleClick} className= { this.state.condition ? "positive active" : "positive"}></div> 

       <div onClick={this.handleClick} className= { this.state.condition ? "neutral active" : "neutral"}>Not Sure</div> 

       <div onClick={this.handleClick} className= { this.state.condition ? "negative active" : "negative"}></div> 

     ); 
    } 
}); 
+0

複数のdivを同時にアクティブにできますか?または、別のdivをクリックした場合、以前にクリックされたdivは非アクティブになりますか? –

+0

一度に1つだけ – jgb

答えて

2

あなたが言ったように、一度に1つのdivだけを有効にします。アクティブなdivを追跡する単一の状態変数を維持することができます。

handleClick: function(divName) { 
    this.setState({ 
     activeDiv: divName 
    }); 
} 

<div> 
    <div onClick={() => this.handleClick('div1')} className= { this.state.activeDiv === 'div1' ? "positive active" : "positive"}>Div1</div> 

    <div onClick={() => this.handleClick('div2')} className= { this.state.activeDiv === 'div2' ? "neutral active" : "neutral"}>Div2</div> 

    <div onClick={() => this.handleClick('div3')} className= { this.state.activeDiv === 'div3' ? "negative active" : "negative"}>Div3</div> 
</div> 

私は、アクティブなdiv要素を追跡しますactiveDivという名前の状態変数を作成した、とclassNameを適用するとき、あなたは現在のdivがアクティブであるかどうかを確認することができます。ここで

、作業Plunkerです:Plunker(ES6構文)

JSFiddle(ES5構文)

PS:あなたは結果を確認するには、ブラウザのコンソールを開く必要があります。

1

あなたがこのアプローチを試すことができます:すべての

  • まず、あなたはそう、返すのレンダリングに一つだけのdivを返す必要があります。それ

  • があなたのthis.state

  • conditionはonClickの関数にそのよう

何か別のパラメーターを追加少し変更カプセル化:

const userVote = React.createClass({ 
getInitialState: function() { 
    return { 
     div1: false, 
     div2: false, 
     div3: false 
    } 
    }, 
    handleClick: function(divNumber) { 
    this.setState({ 
     divNumber: !this.state.condition 
    }); 
    }, 


render() { 
    return(
     <div> 
      <div onClick={() => this.handleClick('div1')} className= { this.state.condition ? "positive active" : "positive"}></div> 

      <div onClick={() => this.handleClick('div2')} className= { this.state.condition ? "neutral active" : "neutral"}>Not Sure</div> 

      <div onClick={() => this.handleClick('div3')} className= { this.state.condition ? "negative active" : "negative"}></div> 
     </div> 
    ); 
} 

を});

+0

これは意味があります、ありがとう - しかし、今私は "div 1は定義されていません"と私は何かが不足していますか? – jgb

+0

申し訳ありませんが、私は関数呼び出しで 'div1'の間の引用符を忘れました。 'div1'、 'div2'、および 'div3'に答えるために追加されました – Robsonsjre

関連する問題