2016-12-18 12 views
5

私はリアクションネイティブとロダッシュのデバウンスで遊んでいます。リアクションネイティブ:ロダッシュデバウンスを使用する

次のコードを使用すると、デバウンスではなく遅延のように動作します。

"foo"のような入力を入力すると、コンソールにデバウンスログを1回だけ記録します。今は "デバウンス"を3回記録する。

+0

入力を変更するたびに 'onChangeText'が呼び出されます。fooと入力すると3回呼び出すデバウンス機能が実行されるので、動作は正しいです。 – jmac

+0

@jmac私は間違いが常に私の上にあることをかなり確信していますが、どのようにそれをアーカイブする必要がありますので、一度起動すると一度起動すると再度起動できます – Norfeldt

+2

_.debounceは新しい機能を作成します。コールバックですが、特別な関数でラップし、変更が発生するたびにデバッグされた関数の新しいインスタンスを手動で作成します。この特別なラッパーを削除する必要があります: 'onChangeText = {_。debounce((text)=> console.log( 'debouncing'、text)、2000)}'。引数については心配しないでください。引数をハンドラに渡します。 –

答えて

26

デバウンス関数は、レンダリングメソッドの外側で定義する必要があります。これは、関数の同じインスタンスを呼び出すたびに呼び出すたびに、onChangeTextハンドラに入れたときに新しいインスタンスを作成することに反対します関数。

デバウンス機能を定義する最も一般的な場所はコンポーネントのオブジェクトです。

class MyComponent extends React.Component { 
    constructor() { 
    this.onChangeTextDelayed = _.debounce(this.onChangeText, 2000); 
    } 

    onChangeText(text) { 
    console.log("debouncing"); 
    } 

    render() { 
    return <Input onChangeText={this.onChangeTextDelayed} /> 
    } 
} 
+0

私はこれを長年にわたってやろうとしています...あなたの心を祝福しています。 –

+1

@SkipSuvaが助けてうれしい! –

+0

ありがとう@GeorgeBorunov –

関連する問題