角度オンプッシュ変化検出とコンポーネント設計に関する詳細なガイド
5296 ワード
導入
すべてのお気に入りのプロジェクトのために、我々は角度に切り替えている.我々は角度を提供し、どのように素晴らしいオンラインアプリケーションを作成するために使用することができます理解しています.しかし、我々が我々のプロジェクトでより効果的にそれを使うのを援助する角について知っている若干のものが、あります.
角度を通してすべてを実行している間、データフローが心臓にあるので、変化発見は意識する何かです.それははるかに簡単にエラーを追跡し、我々のアプリを改善するときに大規模なデータセットで動作するようになります.
我々はこれまで我々のプロジェクトの角度onpush変化検出技術を実装しようとしましたが、いくつかの困難なデバッグバグに実行し、デフォルトの変更検出に戻す必要がありますか?
この記事では、角度変化検出、データ構造、および変更不可能なプロセスを見ます.
どのような角度での変化検出ですか?
我々のモデルのいずれかに変更を行うと、角はそれを認識し、すぐにビューを更新します.角では、これを変化検出と呼ぶ.このメソッドは、基になるビューとその付随モデルが常に同期していることを確認することを目的としています.角度のこの重要なコンポーネントは、それがティックになります、それは近代的なオンラインアプリを構築するためのそのような良い選択の理由の一つです.
次のいずれかのシナリオで角度モデルを変更できます.
検出器を変える
すべての角度プログラムは、コンポーネントの階層木から実行されます.ランタイム中に、角はツリー内の各コンポーネントに対して別々の変更検出クラスを作成します.結果として、コンポーネント階層ツリーに等しい変更検出器の階層ができます.
角度が変化検出器がこの変化の木を通過するときはいつでも、変化検出がそれらのどれが変化を報告したかどうか見るために引き起こされます.
すべての検出された変化は、単一の変化検出サイクルにさらされる.コンポーネントデータが親から来ることができるのを知っているので、この連続したデザイン選択はモデルを予測的に変えるので、よいです.
変化検出器階層
変化を角度に報告するために、変化検出器は、その構造と同様に構成要素の歴史的で現在の状態を追跡します.
角度が変化検出器報告を受け取るとき、それは文書オブジェクトモデル(DOM)を再表示して、更新するために適切なコンポーネントに指示します.
変更検出戦略
値対参照型
変更検出戦略とどのように動作するかを理解するために、JavaScriptの値型と参照型の違いを最初に理解しなければなりません.我々はすでにどのように動作するかに精通している場合は、この部分をスキップすることができます.
値と参照型のレビューを始めましょう.
値型
参照型
値型と参照型との間の重要な違いは、値型の値を読むことがスタックメモリを検証するだけであるのに対し、参照型の値を読むときには、最初に参照を取得するためにスタックメモリを問い合わせる必要があります.
信頼性の探索Angular Development Company ? あなたの検索はここで終わります.
デフォルト戦略
前に述べたように、角度の時計は、それがすべてのそれらをキャプチャするようにモデルに変更を変更します.これは、全体のアプリケーションモデルの前の状態と現在の状態の間の任意の変更を探します.
角度は、デフォルトの変更検出戦略で次の質問を発生させます.しかし、参照型では、より良いクエリを求めるための戦略を使用できます.Onpush変化検出方法はここで遊びに入ります.
オンプッシュ戦略
Onpushテクニックは、immutableオブジェクトのような参照型を扱うことで、値の変化がはるかに速くなることに気づくことができます.参照型が変更不可能な場合、スタックメモリ上のリファレンスが更新されるたびに変更されなければならないことを示します.今、私たちは単にチェックすることができます:参照タイプのリファレンス(スタックの)は変わりましたか?この場合は、すべての値をダブルチェックします.これを理解している場合は、前のスタックのヒープ図に戻ってください.
つの質問をする代わりに、Onpushアプローチは2を尋ねます.リファレンスタイプのリファレンスの変更がありましたか?これがそうであるならば、ヒープメモリの値は変化しましたか?
30要素の不変の配列を仮定し、変更があったかどうかを確認します.変更不能な配列が更新されるためには、それへのリファレンス(スタック内)が変更されなければならないことを知っています.これは、配列参照がすぐに異なっているかどうかを確認することができることを意味します.Onpushアプローチは、それが呼ばれるものです.
ですから、参照型を変更不能に扱うことは何でしょうか.これは、参照型のプロパティを設定することはなく、全体として値を再設定することを意味します.次のようにしてください.
オブジェクトを変更可能です
static mutable() {
var before = {foo: "bar"};
var current = before;
current.foo = "hello";
console.log(before === current);
// => true
}
オブジェクトを変更不能に扱うstatic mutable() {
var before = {foo: "bar"};
var current = before;
current = {foo "hello"};
console.log(before === current);
// => false
}
上記の例では、慣例では変更不可能なものとして参照型を扱っていますので、今日の最後に変更可能なオブジェクトを扱っています.そこで、どのようにコンポーネントのためのアクションにonpush戦略を置くのですか?単に@ component注釈でchangedetection議論を含めてください.
import {ChangeDetectionStrategy, Component} from '@angular/core';
@Component({
// ...
changeDetection: ChangeDetectionStrategy.OnPush
})
export class OnPushComponent {
// ...
}
結論
角度の変更検出は、コンポーネントのデータとそのHTMLテンプレートビューは常に同期していることを保証する組み込みのフレームワーク機能です.変更検出は、各コンポーネントのビューがマウスクリック、HTTPリクエスト、およびその他の種類のイベントのような典型的なブラウザイベントを認識することによって更新されるかどうかを決定します.
Reference
この問題について(角度オンプッシュ変化検出とコンポーネント設計に関する詳細なガイド), 我々は、より多くの情報をここで見つけました https://dev.to/tarungurang/a-detailed-guide-on-angular-onpush-change-detection-and-component-design-254nテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol