useRefFromEffect
Some checks failed
Lint / lint (push) Failing after 9s

This commit is contained in:
Julien Valverdé
2025-01-11 18:45:18 +01:00
parent 038f38d32c
commit 7e239b0d1e
2 changed files with 10 additions and 9 deletions

View File

@@ -1,7 +1,6 @@
import { Reffuse } from "@/reffuse" import { Reffuse } from "@/reffuse"
import { createFileRoute } from "@tanstack/react-router" import { createFileRoute } from "@tanstack/react-router"
import { Console, DateTime, Effect, Ref, Schedule, Stream, SubscriptionRef } from "effect" import { Console, DateTime, Effect, Ref, Schedule, Stream } from "effect"
import { useMemo } from "react"
const timeEverySecond = Stream.repeatEffectWithSchedule( const timeEverySecond = Stream.repeatEffectWithSchedule(
@@ -16,13 +15,7 @@ export const Route = createFileRoute("/time")({
function Time() { function Time() {
const runtime = Reffuse.useRuntime() const timeRef = Reffuse.useRefFromEffect(DateTime.now)
const timeRef = useMemo(() => DateTime.now.pipe(
Effect.flatMap(SubscriptionRef.make),
runtime.runSync,
// eslint-disable-next-line react-hooks/exhaustive-deps
), [])
Reffuse.useFork(Effect.addFinalizer(() => Console.log("Cleanup")).pipe( Reffuse.useFork(Effect.addFinalizer(() => Console.log("Cleanup")).pipe(
Effect.flatMap(() => Effect.flatMap(() =>

View File

@@ -75,6 +75,14 @@ export class Reffuse<R, ER> {
return React.useMemo(() => runtime.runSync(SubscriptionRef.make(value)), []) return React.useMemo(() => runtime.runSync(SubscriptionRef.make(value)), [])
} }
useRefFromEffect<A, E>(effect: Effect.Effect<A, E, R>): SubscriptionRef.SubscriptionRef<A> {
const runtime = this.useRuntime()
return React.useMemo(() => runtime.runSync(effect.pipe(
Effect.flatMap(SubscriptionRef.make)
)), [])
}
useRefState<A>(ref: SubscriptionRef.SubscriptionRef<A>): [A, React.Dispatch<React.SetStateAction<A>>] { useRefState<A>(ref: SubscriptionRef.SubscriptionRef<A>): [A, React.Dispatch<React.SetStateAction<A>>] {
const runtime = this.useRuntime() const runtime = this.useRuntime()