今日、React プロジェクトに取り組んでいたとき、入力 onKeyDown イベントをスロットルしましたが、スロットル効果は失敗しました。 問題コード: 与える() { 戻る ( <div className="検索バー"> <input className="search-input" type="text" placeholder="検索するユーザー名を入力してください(英語)" onKeyDown={this.throttle(this.handleKeyDown)}/> </div> ) } スロットル = (fn) => { 有効 = true とする const コンテキスト = this 関数()を返す{ (!有効)の場合、戻り値 有効 = 偽 const args = 引数 fn.apply(コンテキスト、引数) タイムアウトを設定する(() => { 有効 = 真 }, 1000); } } ハンドルキーダウン = (e) => { {値} = e.targetとする 定数キーコード = e.keyCode (キーコード!== 13)の場合、戻り値 if (!value.trim()) 戻り値 // 検索を送信 this.props.search(value) } ここでの問題は次の通りです: handleKeyDown() メソッドの this.props.search(value) このようにして、throttle() メソッドが再実行されます。 スロットル = (fn) => { console.log('%c スロットル初期化', '色: 赤'); 有効 = true とする const コンテキスト = this 関数()を返す{ (!有効)の場合、戻り値 有効 = 偽 const args = 引数 fn.apply(コンテキスト、引数) タイムアウトを設定する(() => { 有効 = 真 }, 1000); } } コードに印刷を追加すると、スロットル初期化によってコンソールに複数の行が印刷されることがわかります。 解決策1:スロットル初期化位置をイベント関数の割り当てに入れる 与える() { 戻る ( <div className="検索バー"> <input className="search-input" type="text" placeholder="検索するユーザー名を入力してください(英語)" onKeyDown={this.handleKeyDown}/> </div> ) } handleKeyDown = this.throttle((e) => { {値} = e.targetとする 定数キーコード = e.keyCode (キーコード!== 13)の場合、戻り値 if (!value.trim()) 戻り値 // 検索を送信 this.props.search(value) }) 解決策2: コンストラクタで初期化を割り当てる与える() { 戻る ( <div className="検索バー"> <input className="search-input" type="text" placeholder="検索するユーザー名を入力してください(英語)" onKeyDown={this.handleKeyDown}/> </div> ) } コンストラクタ(props) { スーパー(小道具) this.handleKeyDown = this.throttle(this.handleSearch) } ハンドルサーチ = (e) => { {値} = e.targetとする 定数キーコード = e.keyCode (キーコード!== 13)の場合、戻り値 if (!value.trim()) 戻り値 // 検索を送信 this.props.search(value) } 採掘ピットの概要:反応ライフサイクルのトリガーメカニズムをより深く理解するために 上記は、React イベント スロットリング効果の失敗の原因と解決策の詳細な内容です。React イベント スロットリング効果の失敗の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: スーパーバイザーを使用して nginx + tomcat コンテナを管理する例
>>: MySQL IN ステートメントにおける低速クエリの効率を最適化する手法の例
最近、仕事でモバイルページを作成しました。もともと特別なことではありませんでしたが、非常に奇妙に感じ...
WeChatコンポーネントの形式で提供されます。コンポーネント内部ではasync/awaitが使用さ...
序文<router-link> タグは、Vue アプリ内のさまざまなページ間を移動するた...
ウェブサイトの解析を高速化するために、動的ページと静的ページを異なるサーバーで解析して、解析速度を向...
目次Portainerは複数のDockerコンテナ環境を管理します2. Dockerを管理する2.1...
序文:プロジェクト開発では、一部のビジネス テーブル フィールドで日付と時刻の型が使用されることが多...
問題の説明MySQL の起動時にエラーが報告されます。エラー ログを確認してください。 [エラー] ...
カルーセルとは何ですか?カルーセル: モジュールまたはウィンドウで、コンピューターでマウスをクリック...
<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...
HTML img タグ: Web ページに導入される画像を定義します。興味深い usemap 属性も...
プロジェクト(nodejs)では、一度に複数のデータをデータベースに挿入する必要があります。データベ...
1. 最新のnginx dockerイメージをダウンロードする $ docker pull ngin...
テーブルを画面全体(残りの空白領域)に表示するために、幅属性は 100% と定義されることが多く、セ...
目次1. インストール2. はじめに3. 使用4. 必要に応じてEChartsチャートとコンポーネン...
1. 簡単な紹介Vue.js を使用すると、一般的なテキストの書式設定に使用できる独自のフィルターを...