ホームページ > ウェブフロントエンド > jsチュートリアル > React アプリケーションで効果的にデバウンスする方法は?

React アプリケーションで効果的にデバウンスする方法は?

Mary-Kate Olsen
リリース: 2024-12-09 16:05:11
オリジナル
433 人が閲覧しました

How to Effectively Debounce in React Applications?

デバウンスを実行するにはどうすればよいですか?

元の質問への回答

提供されたデバウンス関数は、 handleOnChange 関数。これを修正するには:

    handleOnChange: function(event) {
        // Make Ajax call
    }.bind(this)
ログイン後にコピー

最新のデバウンス技術

Promise とフック (推奨、2019 )

const SearchBox = React.createClass({
render: function() {
return <input type=&quot;search&quot; name=&quot;p&quot; onChange={this.handleOnChange} />;
},
handleOnChange: function(event) {
    // Make Ajax call
  }
});
ログイン後にコピー

Promiseデバウンス

import React from 'react';
import awesomeDebouncePromise from 'awesome-debounce-promise';

const SearchBox = () => {
    const [inputText, setInputText] = React.useState('');

    const debouncedSearch = React.useMemo(
        () => awesomeDebouncePromise(args => searchStarwarsHeroAsync(args), 300),
        []
    );

    // ...rest of SearchBox component
};
ログイン後にコピー

コールバック

ES6 クラス プロパティの場合:

class SearchBox extends React.Component {
    method = debounce(() => {
        // ...
    });
}
ログイン後にコピー

ES6 クラス コンストラクターの場合:

class SearchBox extends React.Component {
    constructor(props) {
        super(props);
        this.method = debounce(this.method.bind(this), 1000);
    }
    method() { ... }
}
ログイン後にコピー

とES5:

var SearchBox = React.createClass({
    method: function() {...},
    componentWillMount: function() {
        this.method = debounce(this.method.bind(this), 100);
    },
});
ログイン後にコピー

React でのイベント プーリングの処理

React では、イベント オブジェクトがプールされ、再利用できます。イベント コールバックの呼び出し後にイベント プロパティがクリアされる可能性があるため、デバウンスまたはスロットルを使用するときに問題が発生する可能性があります。

これを回避するには、イベント オブジェクトでpersist() メソッドを使用します。これにより、イベントがプールされることがなくなり、そのプロパティに非同期でアクセスできるようになります。

onClick = (e) => {
    e.persist();
    // ...
};
ログイン後にコピー

以上がReact アプリケーションで効果的にデバウンスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート