2016-12-01 5 views
0

Ich baue eine Funktion, die eine API-Anforderung auf Tastendruck führt, aber ich möchte diese entprellt.Entprellung arbeitet nicht mit React-Redux app

Dies ist nicht funktioniert und erzeugt einen Fehler: lodash.js:10319 Uncaught TypeError: Expected a function

Hier ist ein Code-Snippet mit einem Konsolenprotokoll statt Asynchron-Anfrage, die nicht funktioniert auch!

import React from 'react'; 
const _ = require('lodash'); 

const method =() => { 
    return _.debounce(testFunc(), 3000); 
}; 

const testFunc =() => { 
    console.log('echo echo test test'); 
}; 


const SearchBox = ({ onTypingSearch, searchTerm }) => (
    <form> 
     <p>Search: {searchTerm}</p> 
     <input 
      onChange={(e) => { 
       console.log(e.target.value);     
       onTypingSearch(e.target.value); 
       console.log(method); 
       method(); 
      }} 
       value={searchTerm} 
     /> 
    </form> 
); 

export default SearchBox; 

Antwort

3

Sie haben die Funktion zum Entprellen, nicht das Ergebnis nannte es:

Dieses:

const method =() => { 
    return _.debounce(testFunc(), 3000); 
}; 

Um dies:

const method =() => { 
    return _.debounce(testFunc, 3000); 
}; 

Update:

Die Art, wie du dich festgelegt hast s up, method gibt eine entprellte Funktion zurück. Wenn Sie also method() aufrufen, wird eine Funktion zurückgegeben. Dann müssen Sie es anrufen: method()().

Es ist besser, dies zu tun:

const method = _.debounce(() => { 
    return testFunc(); 
}, 3000); 

Und wenn Sie args wollen:

const method = _.debounce((e) => { 
    return testFunc(e); 
}, 3000); 

Dann können Sie auch weiterhin die Art und Weise rufen Sie im Moment tun: method().

+0

versuchte ich, dass aber dann meine Funktion ausgeführt nicht erhalten? – darkace

+0

Auch wie würden Sie dann passieren auf die Funktion ein Argument durch, wenn Sie benötigen? – darkace

+1

Von dem [docs] (https://lodash.com/docs/4.17.2#debounce): 'Die func ist mit den letzten Argumenten aufgerufen zum entprellten function' –