今日、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 ステートメントにおける低速クエリの効率を最適化する手法の例
目次【機能背景】 [生のSQL] 【独自SQL解析】 【分析手順】 [最適化されたSQL] 【最適化...
MySQL はオープンソースの小規模リレーショナル データベース管理システムです。現在、MySQL...
CentOS 8 ではソフトウェア パッケージのインストール プログラムが変更され、yum 構成方法...
ネットでいろいろ検索してみたところ、Linux システム向けではなく、現在の新しいバージョンと一致し...
1. Dockerfileを書く(1)プロジェクト名を右クリックして新しいテキストファイルを作成し、...
序文Tomcat は、無数のチューニング オプションを備えた、広く使用されている Java Web ...
さらに、ブログ プログラムで構築された記事 Web サイトは常にブログのように見え、カスタマイズでき...
(Web ページの読み込み中に、コンテンツが多すぎて読み込みと待機が続くことがあります。このとき、...
目次1. ソフトウェアとシステムイメージ2. 仮想マシンを作成する3. CentOS8をインストール...
「通常 1em=16px」と言うのはなぜですか?ユーザーのブラウザによってレンダリングされるデフォル...
目次序文なぜユニットテストを導入するのですか?ユニットテストの概要テスト開発パターン1. テスト駆動...
CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...
たとえば、次のように入力します。 XML/HTML コードdiv#ページ>(div#ヘッダー&...
JSX を使用してコンポーネント システムを構築する前に、例を使用してコンポーネントの実装原理とロ...
このメモはインストール チュートリアルです。実用的な意味はありません。記録のためだけに書いています。...