This hook call given function within the RAF loop without re-rendering parent component. Loop stops automatically on component unmount.
Additionally hook provides methods to start/stop loop and check current state.
import { useRafLoop, useState } from 'vue-next-use';
const Demo = {
setup(){
const [ticks, setTicks] = useState(0);
const [lastCall, setLastCall] = useState(0);
const [loopStop, loopStart, isActive] = useRafLoop((time) => {
setTicks(ticks => ticks + 1);
setLastCall(time);
});
return () => (
<div>
<div>RAF triggered: {ticks.value} (times)</div>
<div>Last high res timestamp: {lastCall.value}</div>
<br />
<button onClick={() => {
isActive.value ? loopStop() : loopStart();
}}>{isActive.value ? 'STOP' : 'START'}</button>
</div>
);
}
};
const [stopLoop, startLoop, isActive] = useRafLoop(callback: FrameRequestCallback, initiallyActive = true);
callback
:(time: number)=>void
β function to call each RAF tick.time
:number
β DOMHighResTimeStamp, which indicates the current time (based on the number of milliseconds since time origin).
initiallyActive
:boolean
β whether loop should be started at initial render.- Return
stopLoop
:()=>void
β stop loop if it is active.startLoop
:()=>void
β start loop if it was inactive.isActive
:ComputedRef<boolean>
β true if loop is active.