diff --git a/packages/reffuse/src/ReffuseNamespace.ts b/packages/reffuse/src/ReffuseNamespace.ts index 5a78367..e1890bb 100644 --- a/packages/reffuse/src/ReffuseNamespace.ts +++ b/packages/reffuse/src/ReffuseNamespace.ts @@ -378,12 +378,15 @@ export abstract class ReffuseNamespace { ]) } - useRef( + useRef( this: ReffuseNamespace, - initialValue: A, + initialValue: () => A | Effect.Effect, ): SubscriptionRef.SubscriptionRef { return this.useMemo( - () => SubscriptionRef.make(initialValue), + () => pipe(initialValue(), + v => Effect.isEffect(v) ? v : Effect.succeed(v), + Effect.flatMap(SubscriptionRef.make), + ), [], { doNotReExecuteOnRuntimeOrContextChange: true }, // Do not recreate the ref when the context changes ) @@ -393,7 +396,7 @@ export abstract class ReffuseNamespace { this: ReffuseNamespace, value: A, ): SubscriptionRef.SubscriptionRef { - const ref = this.useRef(value) + const ref = this.useRef(() => value) this.useEffect(() => Ref.set(ref, value), [value], { doNotReExecuteOnRuntimeOrContextChange: true }) return ref }