creates a bottleneck to the definition of a state, limits concurrency.
this hook is similar to useState, but the purpose of this hook is to bottleneck the state at update time
mode differences
fps:
if delay is set to 1, the update is executed for each cycle of requestAnimationFrame(60fps),
if delay is defined as 2, the update is executed for every 2 cycle of requestAnimationFrame(30fps)
timeout: the delay will be the milliseconds for setTimeout
idle : the delay will be the milliseconds for requestIdleCallback