2016-03-29 2 views
3

J'essaye d'ajouter debouncing avec lodash à une fonction de recherche, appelée d'un événement onChange d'entrée. Le code ci-dessous génère une erreur de type 'function is expected', ce que je comprends parce que lodash attend une fonction. Quelle est la bonne façon de faire cela et peut-elle être faite en ligne? J'ai essayé presque tous les exemples jusqu'ici sur SO en vain.Lodash debounce avec React Input

search(e){ 
let str = e.target.value; 
debounce(this.props.relay.setVariables({ query: str }), 500); 
}, 

Répondre

7

La fonction anti-rebond peut être passé en ligne dans le JSX ou mis directement en tant que méthode de classe comme on le voit ici:

search: _.debounce(function(e) { 
    console.log('Debounced Event:', e); 
}, 1000) 

Fiddle:https://jsfiddle.net/woodenconsulting/69z2wepo/36453/

Si vous utilisez es2015 + vous pouvez définir votre méthode anti-rebond soit dans votre constructor ou dans componentWillMount.

Exemple:

componentWillMount() { 
    this.search = _.debounce(e => { 
    console.log('Debounced Event:', e); 
    }, 1000); 
} 
+0

Merci pour cela. Ce que je vois maintenant est un journal de console de l'événement synthétique et j'ai besoin du e.target.value pour effectuer la recherche .. J'ai essayé e.persist() mais il ne semble pas faire n'importe quoi. Debouncing fonctionne techniquement mais sans lui donner une valeur, ça ne marche pas. Merci pour toute aide. –

+0

Je ne pouvais pas l'utiliser exactement, mais cela m'a permis d'aller là où je devais aller. J'ai essentiellement eu la recherche d'appel d'entrée (e) et ensuite passé cet événement à une autre fonction avec le debouncing. J'ai lu à propos de event.persist() mais je n'ai pas pu obtenir ce travail. Merci de votre aide!! –

+0

Cochez cette réponse également: https://stackoverflow.com/a/28046731/551030 –

1

Ce n'est pas si simple question

D'une part travailler juste erreur autour de vous obtenez, vous devez conclure vous setVariables dans la fonction:

search(e){ 
    let str = e.target.value; 
    _.debounce(() => this.props.relay.setVariables({ query: str }), 500); 
} 

D'autre part, Je crois que la logique anti-rebond doit être encapsulée dans Relay.