今日、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 ステートメントにおける低速クエリの効率を最適化する手法の例
目次WXS レスポンス イベントプランAページ構造とスタイルWXS イベントコールバック関数WXS ...
HTML入門ハイパーテキスト マークアップ言語: ハイパーテキスト マークアップ言語ハイパーテキスト...
目次序文QueryCache の概要クエリキャッシュ構成QueryCache の使用queryCac...
目次1. イメージをプルする2. Redisコンテナを作成する3. コンテナを起動するためにクラスタ...
この記事の例では、画像比較を実現するためのjQueryプラグインの具体的なコードを参考までに共有して...
WeChat アプレットのスクロール ビューでは、プルアップして読み込むときにバグが多く発生します...
1. ビデオタグFirefoxでは自動再生をサポートしますが、GoogleとIEではサポートしません...
機能別に並べ替えNN: このタグをサポートする Netscape の以前のバージョンを示しますIE:...
目次オブザーバーパターンVue パス値最初のステップは、main.jsにバスを登録することです。 2...
目次アプレットのソースコードはどこにありますか? PC ミニプログラムはどのように暗号化されますか?...
CSS プロパティのブラウザ互換性をまとめる必要があるのはなぜですか?使用する際は、Can I U...
目次シンプルなSpringbootプロジェクトを作成する1. pom.xmlでSpring Boot...
centos-DVD1バージョンシステムの固定IPアドレスは192.168.159.128で、cen...
MySQL トリガー構文の詳細: トリガーは、特定のテーブル内のデータが挿入、削除、または更新される...
<TD> タグの属性は、テーブル内のセルのプロパティを設定するために使用されます。表 &...