Tldraw/packages/state/src/lib/react/useReactor.ts

20 wiersze
515 B
TypeScript

import { useEffect, useMemo } from 'react'
import { EffectScheduler } from '../core'
/** @public */
export function useReactor(name: string, reactFn: () => void, deps: undefined | any[] = []) {
const scheduler = useMemo(
() => new EffectScheduler(name, reactFn, { scheduleEffect: (cb) => requestAnimationFrame(cb) }),
// eslint-disable-next-line react-hooks/exhaustive-deps
deps
)
useEffect(() => {
scheduler.attach()
scheduler.execute()
return () => {
scheduler.detach()
}
}, [scheduler])
}