From ca961e912279d6746ee9298d98ce36127d4e900a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 15 Jan 2025 23:44:36 +0100 Subject: [PATCH] useLayoutEffect --- packages/reffuse/src/Reffuse.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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 },