今日、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 ステートメントにおける低速クエリの効率を最適化する手法の例
コードをコピーコードは次のとおりです。 <本文> //マーキーの助けを借りて<MA...
背景: parseInt(0.006) または parseInt(0.0006) は 0 という値を...
1. 既存のnginxがipv6をサポートしているかどうかを確認する既存の nginx が ipv6...
nginx をリバース プロキシ tomcat として使用する場合、セッション損失が発生する可能性が...
1. コマンドの紹介date コマンドは、現在の時刻または指定された時刻を指定された形式で表示するた...
Docker を実行するには root 権限が必要です。非 root ユーザーに docker コマ...
目次splice() メソッドjoin() メソッド逆() メソッドevery() メソッド削減()...
目次導入主な特徴エフェクト表示キーコード導入音声キューイングシステムは、銀行、レストラン、病院などの...
1. Dockerをインストールする1. 仮想マシンに Centos7 をインストールしました。Li...
この記事では、ショッピングサイトの商品の拡大鏡効果を実現するためのjsの具体的なコードを紹介します。...
先ほど使用したDocker HubはDockerによって提供されています。独自のDockerを構築す...
ログイン + セッションストレージエフェクト表示ログインに成功すると、ユーザー ID がフロントエン...
残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...
序文ターミナルを使用してデータベースまたはテーブルを作成するたびに、文字セットが latin1 であ...
目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...