Using "lodash.debounce" in function components.

Oct 12, 2021

Wrong: declare a debounced function inside a render function.

function SomeInput(){
  const debouncedCalculation = debounce(calculation,1000)
  return <Input onChange={(e)=>debouncedCalculation(e)}/>
}

If the component is rendered 4 times, 4 debouncedCalculation instances will be created, and when the delays end, all 4 instances will call the method inside.

render 1:  debouncedCalculation1
render 2:  debouncedCalculation2
render 3:  debouncedCalculation3
render 4:  debouncedCalculation4

Correct: declare a debounced function once outside a render function.

const debouncedCalculation = debounce(calculation,1000)

function SomeInput(){
  return <Input onChange={(e)=>debouncedCalculation(e)}/>
}

Now the debouncedCalculation will be created once per import, and when the delay end, only 1 instance will call the method inside.

render 1:  debouncedCalculation
render 2:  debouncedCalculation
render 3:  debouncedCalculation
render 4:  debouncedCalculation