2017-12-01 39 views
0

私は、その場でAPI呼び出しを行うための検索入力を持っています。私はサーバコールの量を減らすためにデバウンスを実装したいと思います。反応内の検索入力にdebounceを使用する

_debouncedSearch() { 
    debounce(this.props.fetchRoutes(this.state.searchText), 1000); 
    } 

    _updateResults(searchText) { 
    this.setState({searchText}); 
    this._debouncedSearch(); 
    } 

私はdebouncedSearchを1秒ごとに期待しています。しかしそれはまだオンザフライで呼ばれています。エラーを投げる:

Uncaught TypeError: Expected a function at debounce (lodash.js?3387:10334)

Uncaught Error: A cross-origin error was thrown. React doesn't have access to the actual error object in development.

私はこの質問がたくさんの周りに尋ねられる必要がありますが、解決策のどれも私のために働かないように感じるように感じます。誰かが私にここでの問題がどういうものなのかを説明できましたか?私はデバウンスが単なるsetTimeOutだと思った。

おかげ

+0

debounceは関数を引数として期待していますが、 'this.props.fetchRoutes(this.state.searchText)'はおそらくvoidを返すか、関数ではないものを返します。代わりに関数をデバウンスしようとします。 '()=> this.props.fetchRoutes(this.state.searchText)'または 'function(){this.props.fetchRoutes(this.state.searchText)} 'を使用します。 P.S. :debounceは単なるsetTimeoutではありません – skornous

答えて

1

_.debounceはすでに行わ機能(関数が返す関数)です。

_debouncedSearch= debounce(() => this.props.fetchRoutes(this.state.searchText), 1000); 

代わりに:次に_debouncedSearchは、クラスの属性、およびない方法であるべきである

また
_debouncedSearch() { 
    debounce(this.props.fetchRoutes(this.state.searchText), 1000); 
    } 

、通知、_.debounceの最初の引数は、関数(() => this.props.fetchRoutes...)、直接ではなくなるthis.props.fetchRoutes...

+0

これが関連しているかどうかわかりません。これはローダーの問題ですか? ./src/components/home/Layout.js モジュールのビルドに失敗しました:SyntaxError:クラスプロパティが存在しません。 29 | } 30 | > 31 | _debouncedSearch = debounce( |^ 32 |()=> this.props.fetchRoutes(this.state.searchText)、 33 | 1000 34 |); – Leogoesger

+0

固定!ありがとうございました! – Leogoesger

+0

ところで、babelプラグインを使用している場合、私の構文は正しい: 'class properties transform'。しかし、あなたはそれを使用していないので、 'Missing class properties transform .... 'があります。あなたのbabelを設定してプラグインを追加し、' constructor'を取り除くことをお勧めします –

0
constructor(props) { 
    super(props); 
    this.state = { 
     searchText: '', 
    }; 
    this._debouncedSearch = debounce(
    () => this.props.fetchRoutes(this.state.searchText), 
     1000 
    ); 
    } 

    _updateResults(searchText) { 
    this.setState({searchText}); 
    this._debouncedSearch(); 
    } 

誰かが必要とする場合の完全なコードは次のとおりです。

関連する問題