は、それが角度-2プロジェクト内の合理的な規則は常にコンポーネントのデコレータ内デフォルトのchangeDetectionとしてChangeDetectionStrategy.OnPushをAngular 2でお勧めしますか?
changeDetection: ChangeDetectionStrategy.OnPush
を使用するのでしょうか?デフォルト戦略を使用する明確な理由がある場合を除きますか?
は、それが角度-2プロジェクト内の合理的な規則は常にコンポーネントのデコレータ内デフォルトのchangeDetectionとしてChangeDetectionStrategy.OnPushをAngular 2でお勧めしますか?
changeDetection: ChangeDetectionStrategy.OnPush
を使用するのでしょうか?デフォルト戦略を使用する明確な理由がある場合を除きますか?
いいえ、私はそれをお勧めしません。
角2の変化の検出は非常に高速です。小規模なプロジェクトをお持ちの場合、私はそれを使用することを迷惑にならないでしょう。
大きなプロジェクトをお持ちの場合、特定の「リーフ」コンポーネント(入力プロパティのみに依存するビューバインディングを持つリーフコンポーネント)でOnPush
を使用する可能性があります。
caused the OnPush
component to be change detectedがない場合、子コンポーネントのいずれもチェックされないため、子コンポーネントが自動的に検出されるのを防ぐことができます。したがって、私は通常、この問題を避けるためにリーフコンポーネントでしか使用しません。
入力プロパティにJavaScript参照型を使用すると、OnPush
は、それらの参照型のプロパティに対する変更を検出しないことにも注意してください(たとえば、配列に要素を追加または削除する場合や、プロパティの値をオブジェクト。)あなたはバインディングコンポーネントでのエラーを防止するために、グローバルOnPush使用したい場合は
あなたは、これははるかに安全ルートになる変更を許可immutable.jsだろう「凍結」すべてのオブジェクトを使用していない可能性があり
リーフコンポーネントでないときに問題になるのはなぜですか? OnPushの目的は、変更検出を実行する必要のあるツリーを削除することではないのでしょうか? –
こんにちは@GünterZöchbauer、あなたの意図がツリーの一部を切り取ることであるなら、それは正しいです、それは問題ではなくむしろ機能です。 (私は人々がこれを理解していないケースを見ているので、問題に陥ります。) –
'OnPush'を正しく使うためには、変更検出をかなりうまく理解する必要があると思いますが、それがデフォルトではない唯一の理由です。そのAFAIKに加えて、Angular2チームは、アプリケーションをもっと速くするため、 'OnPush'を使うことを推奨しています。最初のAngular2プロジェクトを開始したときに、Angular2の仕組みをよく理解してから、OnPushで始めることはお勧めしません。 –