@debounce
手ぶれ補正機能:関数n秒を呼び出すと、アクションが一度に実行され、実行時間前に順番にn秒が呼び出した場合、関数がキャンセルされることを再計算。
ユースケース
1 |
インポート {デバウンス} から 「コア-デコレータ」。 |
1 |
< TEXTAREAの ID = "エディタ" > </ TEXTAREA > |
idは編集エディタ入力されたリスニング場合、例えば、各エントリがトリガするoninput
呼び出し、イベントをthis.updateContent
方法。することができ、頻繁なコンテンツ更新を防止するために、updateContent
入力時に更新しない、デバウンス方法を装飾this.content
、入力が再度500ミリ秒、一回のコンテンツの更新内容が終了するまで。
ソース
1 |
インポート {metaFor} から 」./private/utils'。 |
コールのパラメータ
着信コールをサポートしている場合、待機とoptions.immediate二つのパラメータ:
- 待つ:時間を実行ユニットミリ秒、デフォルト値300を待っています
- {即時}:結合機能を実行するかどうか、デフォルト値は、実行待ちの前に時間を待って、falseです。trueに渡される最初のパラメータを行いました
メタオブジェクト
1 |
CONST {} = debounceTimeoutIds metaFor(この); |
metaFor
現在のインスタンスの増加する方法Symbol('__core_decorators__')
、属性、値メタオブジェクト。
デバウンス及びスロットルを用いる属性を含む、以下に示すように、メタタイプ:
1 |
class Meta { |
使用了@lazyInitialize
标记,可以使得每次只初始化被用到的属性,像debounce的时候只用到debounceTimeoutIds属性。console输出Meta对象,结构如图所示,可以看到只初始化了debounceTimeoutIds属性:
debounceTimeout存储
コールがある場合
@debounce
、標識の方法中:
..機能の1のsetTimeout遅延実行、オブジェクトがタイムアウトを返し、
返された2タイムアウトオブジェクトはに格納されます。debounceTimeoutIds[key]
(でupdateContent
方法の例として、debounceTimeoutIds[key]
キー値はここにあるupdateContent
);
3リピートコール。前カバーこの方法は、タイムアウトオブジェクトを再作成するdebounceTimeoutIds[key]
(各コールがどこupdateContent
再することでdebounceTimeoutIds['updateContent']
割り当てを)
1 |
setTimeout( () => { 削除 debounceTimeoutIds [キー]; 場合!(即時){ callback.applyは(この、引数); } }、待機します)。 |
結果の実装はこれです:たびに、再度、待って待っての値に対応するキーであるコールバックメソッド、コールバックメソッドを実行して行きます。
オリジナル:大列 --debounceのコア-デコレータソースの解析