Search code examples
reactjslodashrelaydebouncing

Lodash debounce with React Input


I'm trying to add debouncing with lodash to a search function, called from an input onChange event. The code below generates a type error 'function is expected', which I understand because lodash is expecting a function. What is the right way to do this and can it be done all inline? I have tried nearly every example thus far on SO to no avail.

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

Solution

  • The debounce function can be passed inline in the JSX or set directly as a class method as seen here:

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

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

    If you're using es2015+ you can define your debounce method directly, in your constructor or in a lifecycle method like componentWillMount.

    Examples:

    class DebounceSamples extends React.Component {
      constructor(props) {
        super(props);
    
        // Method defined in constructor, alternatively could be in another lifecycle method
        // like componentWillMount
        this.search = _.debounce(e => {
          console.log('Debounced Event:', e);
        }, 1000);
      }
    
      // Define the method directly in your class
      search = _.debounce((e) => {
        console.log('Debounced Event:', e);
      }, 1000)
    }