diff --git a/packages/effect-components/src/ReactComponent.ts b/packages/effect-components/src/ReactComponent.ts
index 06c33e5..d205fd7 100644
--- a/packages/effect-components/src/ReactComponent.ts
+++ b/packages/effect-components/src/ReactComponent.ts
@@ -22,7 +22,7 @@ export const use =
(
export const useFC =
(
self: ReactComponent
,
options?: ReactHook.ScopeOptions,
-): Effect.Effect, never, R | Scope.Scope> => Effect.map(
+): Effect.Effect, never, Exclude> => Effect.map(
Effect.runtime(),
runtime => props => Runtime.runSync(runtime)(Effect.provideService(self(props), Scope.Scope, useScope(runtime, options))),
)
diff --git a/packages/example/src/routes/effect-component-tests.tsx b/packages/example/src/routes/effect-component-tests.tsx
index 6a506fd..ec39ef1 100644
--- a/packages/example/src/routes/effect-component-tests.tsx
+++ b/packages/example/src/routes/effect-component-tests.tsx
@@ -1,7 +1,7 @@
import { Box, Text, TextField } from "@radix-ui/themes"
import { createFileRoute } from "@tanstack/react-router"
-import { Console, Effect, Layer, ManagedRuntime, Runtime } from "effect"
-import { use } from "effect-components"
+import { Console, Effect, Layer, ManagedRuntime } from "effect"
+import { ReactComponent, ReactHook } from "effect-components"
import * as React from "react"
@@ -13,7 +13,7 @@ function RouteComponent() {
const runtime = React.useMemo(() => ManagedRuntime.make(Layer.empty), [])
return <>
- {runtime.runSync(use(MyTestComponent, Component => (
+ {runtime.runSync(ReactComponent.use(MyTestComponent, Component => (
)).pipe(
Effect.scoped
@@ -26,7 +26,10 @@ const MyTestComponent = Effect.fn(function* MyTestComponent(props?: { readonly v
const [state, setState] = React.useState("value")
const effectValue = yield* Effect.succeed(`state: ${ state }`)
- yield* useEffect(() => Console.log("ouient"), [])
+ yield* ReactHook.useEffect(() => Effect.andThen(
+ Effect.addFinalizer(() => Console.log("MyTestComponent umounted")),
+ Console.log("MyTestComponent mounted"),
+ ), [])
return <>
{effectValue}
@@ -39,13 +42,3 @@ const MyTestComponent = Effect.fn(function* MyTestComponent(props?: { readonly v
>
})
-
-
-const useEffect = (
- effect: () => Effect.Effect,
- deps?: React.DependencyList,
-): Effect.Effect => Effect.gen(function* useEffect() {
- const runtime = yield* Effect.runtime()
-
- React.useEffect(() => Runtime.runSync(runtime)(Effect.asVoid(effect())), deps)
-})