I'm new to rum and am trying to port over some code that implements the material 'ripple' effect. There are numerous complex interactions that go on in this component- 1) on mouse down, I must bind a temporary mouseup event on the window object, which must remove itself. 2) if the mouseup occurs rapidly, it must be delayed by some amount to allow the ripple animation to play. 3) receiving another mousedown must clear this timer. I have a working solution using state, but I think it is rather naive- is there a simpler way to approach this?