@tldraw/state-react
Version:
tldraw infinite canvas SDK (react bindings for state).
23 lines (21 loc) • 610 B
text/typescript
import { EffectScheduler } from '@tldraw/state'
import { throttleToNextFrame } from '@tldraw/utils'
import { useEffect } from 'react'
/** @public */
export function useReactor(name: string, reactFn: () => void, deps: undefined | any[] = []) {
useEffect(() => {
let cancelFn: () => void | undefined
const scheduler = new EffectScheduler(name, reactFn, {
scheduleEffect: (cb) => {
cancelFn = throttleToNextFrame(cb)
},
})
scheduler.attach()
scheduler.execute()
return () => {
scheduler.detach()
cancelFn?.()
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, deps)
}