diff --git a/packages/effect-fc/src/Subscribable.ts b/packages/effect-fc/src/Subscribable.ts
index e1d2d7f..707b0fd 100644
--- a/packages/effect-fc/src/Subscribable.ts
+++ b/packages/effect-fc/src/Subscribable.ts
@@ -33,13 +33,13 @@ export const useSubscribables: {
yield* Component.useOnMount(() => Effect.all(elements.map(v => v.get)))
)
- yield* Component.useOnChange(() => Effect.forkScoped(pipe(
+ yield* Component.useReactEffect(() => Effect.forkScoped(pipe(
elements.map(ref => Stream.changesWith(ref.changes, Equivalence.strict())),
streams => Stream.zipLatestAll(...streams),
Stream.runForEach(v =>
Effect.sync(() => setReactStateValue(v))
),
- )), elements)
+ )), elements, { finalizerExecutionMode: "fork" })
return reactStateValue as any
})
diff --git a/packages/effect-fc/src/SubscriptionRef.ts b/packages/effect-fc/src/SubscriptionRef.ts
index 7fb7604..6a28b02 100644
--- a/packages/effect-fc/src/SubscriptionRef.ts
+++ b/packages/effect-fc/src/SubscriptionRef.ts
@@ -11,10 +11,12 @@ export const useSubscriptionRefState: {
} = Effect.fnUntraced(function* (ref: SubscriptionRef.SubscriptionRef) {
const [reactStateValue, setReactStateValue] = React.useState(yield* Component.useOnMount(() => ref))
- yield* Component.useOnChange(() => Effect.forkScoped(Stream.runForEach(
- Stream.changesWith(ref.changes, Equivalence.strict()),
- v => Effect.sync(() => setReactStateValue(v)),
- )), [ref])
+ yield* Component.useReactEffect(() => Effect.forkScoped(
+ Stream.runForEach(
+ Stream.changesWith(ref.changes, Equivalence.strict()),
+ v => Effect.sync(() => setReactStateValue(v)),
+ )
+ ), [ref], { finalizerExecutionMode: "fork" })
const setValue = yield* Component.useCallbackSync((setStateAction: React.SetStateAction) =>
Effect.andThen(
@@ -31,10 +33,12 @@ export const useSubscriptionRefFromState: {
} = Effect.fnUntraced(function*([value, setValue]) {
const ref = yield* Component.useOnMount(() => SubscriptionRef.make(value))
- yield* Component.useOnChange(() => Effect.forkScoped(Stream.runForEach(
- Stream.changesWith(ref.changes, Equivalence.strict()),
- v => Effect.sync(() => setValue(v)),
- )), [setValue])
+ yield* Component.useReactEffect(() => Effect.forkScoped(
+ Stream.runForEach(
+ Stream.changesWith(ref.changes, Equivalence.strict()),
+ v => Effect.sync(() => setValue(v)),
+ )
+ ), [setValue], { finalizerExecutionMode: "fork" })
yield* Component.useReactEffect(() => Ref.set(ref, value), [value])
return ref