diff --git a/packages/reffuse/src/ReffuseHelpers.ts b/packages/reffuse/src/ReffuseHelpers.ts index 1aa5164..ef94f2d 100644 --- a/packages/reffuse/src/ReffuseHelpers.ts +++ b/packages/reffuse/src/ReffuseHelpers.ts @@ -73,7 +73,6 @@ export abstract class ReffuseHelpers { ), [runtime, context]) } - /** * Reffuse equivalent to `React.useMemo`. * @@ -339,6 +338,33 @@ export abstract class ReffuseHelpers { return value } + useCallbackSync( + this: ReffuseHelpers, + callback: (...args: Args) => Effect.Effect, + deps?: React.DependencyList, + options?: RenderOptions, + ): (...args: Args) => A { + const runSync = this.useRunSync() + + return React.useCallback((...args) => runSync(callback(...args)), [ + ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], + ...(deps ?? []), + ]) + } + + useCallbackPromise( + this: ReffuseHelpers, + callback: (...args: Args) => Effect.Effect, + deps?: React.DependencyList, + options?: { readonly signal?: AbortSignal } & RenderOptions, + ): (...args: Args) => Promise { + const runPromise = this.useRunPromise() + + return React.useCallback((...args) => runPromise(callback(...args), options), [ + ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runPromise], + ...(deps ?? []), + ]) + } useRef( this: ReffuseHelpers,