diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts index 0600222..4371a18 100644 --- a/packages/reffuse/src/Reffuse.ts +++ b/packages/reffuse/src/Reffuse.ts @@ -88,6 +88,26 @@ export class Reffuse { ]) } + useLayoutEffect( + effect: Effect.Effect, + deps?: React.DependencyList, + options?: RenderOptions & ScopeOptions, + ): void { + const runSync = this.useRunSync() + + return React.useLayoutEffect(() => { + const scope = Scope.make(options?.finalizerExecutionStrategy).pipe( + Effect.tap(scope => Effect.provideService(effect, Scope.Scope, scope)), + runSync, + ) + + return () => runSync(Scope.close(scope, Exit.void)) + }, [ + ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], + ...(deps ?? []), + ]) + } + useSuspense( effect: Effect.Effect, options?: { readonly signal?: AbortSignal },