2016-09-21 11 views
2

ReactJSをTypeScriptで使用する場合、コンストラクタ内のクラス変数を初期化する方が良いか、またはクラス変数が宣言されているかどうかを確認してください。それはいずれかの方法でうまく動作し、翻訳されたjavascriptはどちらかと同じように見えます。コンストラクタまたは宣言で変数を初期化する

export class MyClass extends React.Component<iProps, {}> { 
     private myName: string = "Hello"; 

     constructor(props: iProps) { 
     super(props); 

     this.myName= "Hello"; 
     } 
} 
+0

どちらも私には間違っています。なぜなら、小道具のポイントは、クラスが最初に構築されたときではなく、レンダーごとに一度だけ渡されるからです。 –

+0

最初の小道具はctorに渡されますので、両方の方法が有効です。おそらくここには間違いはありませんが、私はいつもメンバーの値をctorの中に設定することを好みます。なぜなら、私の意見ではコードをより理解しやすくするからです。 –

+0

@TomFenech - はい、私は質問から小道具を削除しました。 – Lambert

答えて

1

それは例えば、まったく同じです:

class MyClass1 { 
     private myName: string = "Hello"; 
} 

はにコンパイル:

var MyClass1 = (function() { 
    function MyClass1() { 
     this.myName = "Hello"; 
    } 
    return MyClass1; 
}()); 

そして:

class MyClass2 { 
     private myName: string; 

     constructor() { 
     this.myName = "Hello"; 
     } 
} 

はにコンパイル

var MyClass2 = (function() { 
    function MyClass2() { 
     this.myName = "Hello"; 
    } 
    return MyClass2; 
}()); 

code in playground

コンパイル済みのバージョンは(クラス名を除く)は同一であり、見ることができるように。
あなたはよりエレガントなものを見つけることができます。

reactについては、コンストラクタに渡されるpropsを使用できます。
反応コンポーネントでes6スタイルクラスを使用する場合、初期状態はコンストラクタで割り当てられ、getInitialStateメソッドは使用されません。
初期状態が小道具の機能である場合は、それらをコンストラクタで使用する必要があります。

関連する問題