私の推測では、foo はプロトタイプにあり、bar はコンストラクターにあるのでしょうか?
その通りです。
foo() {}
このコンテキストでは、メソッド宣言があり、値がプロトタイプに割り当てられます。と同等です
MyComponent.prototype.foo = function() {};
bar = ... ;
一方、クラス フィールドです。これは、コンストラクターでインスタンスにプロパティを割り当てるための簡略表記です。
constructor() {
this.bar = ... ;
}
また、アロー関数がどのように機能するかにより、アロー関数でクラス フィールドを使用すると、基本的に「バインドされた」メソッドを作成できます。
アロー関数の詳細:アロー関数と関数宣言/式: それらは同等/交換可能ですか?
そして、いつどれを使うべきですか?
tl;dr は次のとおりです。バインドされた関数が必要な場合は、クラス フィールド + アロー関数を使用します。
バインドされた関数が必要になるのはいつですか? 関数内で特定の値を参照したいが、関数の呼び出し方法this
を制御できない場合。
これは、ほとんどの場合、コンポーネント インスタンスにアクセスする必要があるイベント ハンドラー(つまり、他の関数 / コンポーネントに渡される関数) (呼び出しthis.setState
またはthis.props
/へのアクセスなどthis.state
) に当てはまります。
ただし、使用する必要はありません。必要なときにメソッドをバインドすることもできます。ただし、メソッドがイベント ハンドラーとして渡される場合、常に同じ関数オブジェクトが渡されるように、コンストラクターでメソッドを 1 回だけバインドすることが React コンポーネントにとって理想的です。
別の回答で述べたように、これは React とはまったく関係ありません。クラスフィールドは、今年正式に言語に統合される可能性があります。