2017-11-28 19 views
2

私は乗算と呼ばれる機能と、私は私が使用するコンポーネントに関数を渡すときNumberInputFieldと呼ばれるコンポーネントがあります。明示的に関数をバインドする必要がありますか?

<NumberInputField id='1' action={this.multiply} /> 

を私も見てきました:

<NumberInputField id='1' action={this.multiply.bind(this)} /> 

は、彼らの両方が動作するように見えます。違いはありますか? 1つの方法がより受け入れられますか?

+2

この関数は 'this'を使用していますか?関数はどのように定義されていますか?何の反応バージョンを使用していますか?そのすべての情報が回答に影響します。 – Sulthan

+0

回答が役に立った場合は、それを合格とマークしてください。 –

+0

'this.multiply'のコードを表示せずに、関数が書かれているので、 –

答えて

3

あなたbind機能は、あなたが現在いるクラスの関数コンテキストを与えている。場合は、例えば、this.setState()を使用するために必要なmultiply()機能は、あなたがその機能を持っていることをbindを使用する必要があります適切な文脈。

ただし、レンダリング方法にbindを使用することはお勧めできません。どうして? renderが呼び出されるたびに、bindが再び発生するためです。代わりに、コンストラクタで関数をバインドできます。

さらに良い

constructor() { 
    super(); 
    this.multiply = this.multiply.bind(this); 
} 

あなたはバベルのは、プラグインクラスのプロパティを変換使用している場合、いくつかの答えは、あなたが「これ」にアクセスする必要がある場合だけ、それを必要とすることに注意しないが、あなたはとても

export default class App extends Component { 

    multiply =() => { 
     //Automatically knows about "this" 
    }; 

} 

のようなあなたの関数を書くことができますその機能で。ベストプラクティスも理解することが重要です。 ではなくをレンダリングメソッドでバインドします。

1

編集は:

これは、関数が何をしているかに依存します。状態、小道具などにアクセスする必要がある場合は、それをバインドする必要があります。ベストプラクティスは、矢印関数として作成するか、コンストラクターでバインドすることです。

そうでない場合は、いいえ。しかし、その関数をヘルパー・ファイルに移動することがベスト・プラクティスです。そのため、将来再利用可能な関数であれば、将来使用できるようになります。

関連する問題