2017-01-17 13 views
0

私が反応学び、そしてあなたがview here in CodePen.React:なぜonClickハンドラで矢印関数が使用されていますか?

私は矢印の機能が内部に戻されている広場コンポーネントのonClickプロパティでどのように機能するかについて混乱していますすることができ、単純な三目並べゲームを作成するためにthis tutorialを踏襲していますボードコンポーネントのrenderSquare機能の説明:onClick={() => this.props.onClick(i)}。また、同様に私はonClick={ (i) => this.handleClick(i)}を持っているゲームコンポーネントも同様です。私は矢の機能なしでそれを書くことができると思った(ちょうどonClick={this.handleClick(i)}のように)が、これはゲームを壊す。

+0

ラフ説明パラメーターを結合する役割を行う: 'onClick'イベントトリガで実行される関数を取ります。 '()=> this.foobar(blah)'が実行されると、*は引数blahで 'foobar'を実行する矢印関数*を作成します。あなたが '{this.foobar(blah)} 'を実行できないのは、それが関数を実行して戻り値を渡すからです。 'onClick'は値ではなく、関数executeを必要とします。 – Li357

+0

これを参照してください:http://stackoverflow.com/questions/29810914/react-js-onclick-cant-pass-value-to-method – Jayce444

+0

https://facebook.github.io/ react/docs/handling-events.html – Calvin

答えて

4

onClickは機能を期待しています。矢印関数には独自のものがありませんthis;囲まれた実行コンテキストの値が使用されます(this)。 アロー機能は、この場合には、それは関数を呼び出しますし、それはその戻り値を渡しますので、あなたが

onClick={this.handleClick(i)} 

のようにそれを実行したときにそれが動作しない、次の

onClick={this.handleClick.bind(this,i)} 

ための代替品ですレンダーが呼び出されるたびに評価されます。したがって、インスタンスsetStateの再レンダリングを引き起こすonClick関数で何かをやっている場合、アプリケーションは無限ループに入ります。したがって、onClickは関数であり、値ではないので、onClickハンドラから関数を返さない限り、直接呼び出すべきではありません。

矢印機能は、上記機能に

+0

私はこの結論に 'handleClick'の中に何が入っているか分からなければ到達できないと思います。新しい関数コールバックを値として返すかもしれません。もちろん、それは問題に合っていますが、実際にはhandleClick関数が何をしているかによって変わります。 – Icepickle

+0

@Icepickle、そうです、これは私の古い解答ですが、私は編集中でした詳細はこちら。 –

関連する問題