From 7e239b0d1e43075779348dbdafc2ce33adb2a42a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 11 Jan 2025 18:45:18 +0100 Subject: [PATCH] useRefFromEffect --- packages/example/src/routes/time.tsx | 11 ++--------- packages/reffuse/src/Reffuse.tsx | 8 ++++++++ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/example/src/routes/time.tsx b/packages/example/src/routes/time.tsx index 754c51f..1f01ec6 100644 --- a/packages/example/src/routes/time.tsx +++ b/packages/example/src/routes/time.tsx @@ -1,7 +1,6 @@ import { Reffuse } from "@/reffuse" import { createFileRoute } from "@tanstack/react-router" -import { Console, DateTime, Effect, Ref, Schedule, Stream, SubscriptionRef } from "effect" -import { useMemo } from "react" +import { Console, DateTime, Effect, Ref, Schedule, Stream } from "effect" const timeEverySecond = Stream.repeatEffectWithSchedule( @@ -16,13 +15,7 @@ export const Route = createFileRoute("/time")({ function Time() { - const runtime = Reffuse.useRuntime() - - const timeRef = useMemo(() => DateTime.now.pipe( - Effect.flatMap(SubscriptionRef.make), - runtime.runSync, - // eslint-disable-next-line react-hooks/exhaustive-deps - ), []) + const timeRef = Reffuse.useRefFromEffect(DateTime.now) Reffuse.useFork(Effect.addFinalizer(() => Console.log("Cleanup")).pipe( Effect.flatMap(() => diff --git a/packages/reffuse/src/Reffuse.tsx b/packages/reffuse/src/Reffuse.tsx index 49cf11f..f324fff 100644 --- a/packages/reffuse/src/Reffuse.tsx +++ b/packages/reffuse/src/Reffuse.tsx @@ -75,6 +75,14 @@ export class Reffuse { return React.useMemo(() => runtime.runSync(SubscriptionRef.make(value)), []) } + useRefFromEffect(effect: Effect.Effect): SubscriptionRef.SubscriptionRef { + const runtime = this.useRuntime() + + return React.useMemo(() => runtime.runSync(effect.pipe( + Effect.flatMap(SubscriptionRef.make) + )), []) + } + useRefState(ref: SubscriptionRef.SubscriptionRef): [A, React.Dispatch>] { const runtime = this.useRuntime()