diff --git a/packages/effect-fc/src/SubscriptionRef.ts b/packages/effect-fc/src/SubscriptionRef.ts index 9891abd..eb7e9b8 100644 --- a/packages/effect-fc/src/SubscriptionRef.ts +++ b/packages/effect-fc/src/SubscriptionRef.ts @@ -31,16 +31,17 @@ export const useSubscriptionRefState: { export const useSubscriptionRefFromState: { (state: readonly [A, React.Dispatch>]): Effect.Effect, never, Scope.Scope> } = Effect.fnUntraced(function*([value, setValue]) { - const ref = yield* Component.useOnMount(() => SubscriptionRef.make(value)) - - yield* Component.useReactEffect(() => Effect.forkScoped( - Stream.runForEach( - Stream.changesWith(ref.changes, Equivalence.strict()), - v => Effect.sync(() => setValue(v)), - ) + const ref = yield* Component.useOnChange(() => Effect.tap( + SubscriptionRef.make(value), + ref => Effect.forkScoped( + Stream.runForEach( + Stream.changesWith(ref.changes, Equivalence.strict()), + v => Effect.sync(() => setValue(v)), + ) + ), ), [setValue]) - yield* Component.useReactEffect(() => Ref.set(ref, value), [value]) + yield* Component.useReactEffect(() => Ref.set(ref, value), [value]) return ref })