2016-04-11 7 views
3

まず正しい方法は

<div tabIndex="0" 
    onKeyPress={this.onHandleClick.bind(null, 'first')} 
    onClick={this.onHandleClick.bind(null, 'first')}> 

セカンド

onHandleClick = (event) => { 
    $(event.currentTarget).data('circle') 
} 
<div tabIndex="0" 
    data-circle="first" 
    onClick={this.onHandleClick}> 

をクリックするこれを行うにはそこに別の方法は、クリーンで正しい方法thatsのですか?これらの両方は、ハックのように感じます:特にJSX内のバインドを使用します。

+5

最初のものは、純粋なReactとJavasctiptベースの解決策です。 2番目の解決策は動作しますが、ここではjQueryを使用する必要はありません。 –

+0

大丈夫です、最初の方法でスティックします:) – azz0r

+1

以後、 'bind'するのは大丈夫です: " JavaScriptでコールバックを作成する場合、 Reactを使用すると、すべてのメソッドがコンポーネントインスタンスに自動的にバインドされます。 [詳細はこちら](https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html#under-the-hood-autobinding-and-event-delegation) –

答えて

1

あなた自身が遭遇するかもしれない別の状況は、コールバック内に正しい "this"ポインタ、いくつかの任意のパラメータ、およびイベントオブジェクト自体が必要なことです。その場合、次のようなことができます:

<button onClick={(event) => this.handleAction('arbitrary-data', event)}> ... </button> 

handleAction(data, event) { 
    event.preventDefault() 
    // this.state.something 
    console.log(`data ${data}`) 
} 
3

何がしたいことは、単純に、通常それを呼び出すと、関数が機能を返す必要があり、あなたのonClickハンドラにパラメータを渡すことである場合:

onClick={this.onHandleClick('first')}

onHandleClick(value) { 
    return function() { 
     // logic that now has access to `value` 
    } 
} 

作品ばかりだけでなく、結合、かもしれませんもう少し明確です。 jqueryに依存するよりはるかに優れています。

関連する問題