diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts index d881af1..4915b94 100644 --- a/packages/reffuse/src/Reffuse.ts +++ b/packages/reffuse/src/Reffuse.ts @@ -1,4 +1,4 @@ -import { Context, Effect, ExecutionStrategy, Exit, Fiber, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" +import { Context, Effect, ExecutionStrategy, Exit, Fiber, Option, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" import React from "react" import * as ReffuseContext from "./ReffuseContext.js" import * as ReffuseRuntime from "./ReffuseRuntime.js" @@ -280,6 +280,17 @@ export class Reffuse { return [reactStateValue, setValue] } + + useStreamState(stream: Stream.Stream): Option.Option { + const [reactStateValue, setReactStateValue] = React.useState(Option.none()) + + this.useFork(Stream.runForEach(stream, v => Effect.sync(() => + setReactStateValue(Option.some(v)) + )), [stream]) + + return reactStateValue + } + }