0.1.0 #1

Merged
Thilawyn merged 87 commits from next into master 2025-01-18 00:54:42 +01:00
2 changed files with 15 additions and 3 deletions
Showing only changes of commit 9ff34addcd - Show all commits

View File

@@ -1,9 +1,10 @@
import { Reffuse } from "@/reffuse"
import { TodosContext } from "@/todos/reffuse" import { TodosContext } from "@/todos/reffuse"
import { TodosState } from "@/todos/services" import { TodosState } from "@/todos/services"
import { VTodos } from "@/todos/views/VTodos" import { VTodos } from "@/todos/views/VTodos"
import { Container } from "@radix-ui/themes" import { Container } from "@radix-ui/themes"
import { createFileRoute } from "@tanstack/react-router" import { createFileRoute } from "@tanstack/react-router"
import { Layer } from "effect" import { Console, Effect, Layer } from "effect"
import { useMemo } from "react" import { useMemo } from "react"
@@ -17,6 +18,10 @@ function Index() {
Layer.provideMerge(TodosState.make("todos")) Layer.provideMerge(TodosState.make("todos"))
), []) ), [])
Reffuse.useEffect(Effect.addFinalizer(() => Console.log("Effect cleanup")).pipe(
Effect.flatMap(() => Console.log("Effect recalculated"))
))
return ( return (
<Container> <Container>

View File

@@ -1,4 +1,4 @@
import { Context, Effect, Fiber, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" import { Context, Effect, Exit, Fiber, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect"
import React from "react" import React from "react"
import * as ReffuseContext from "./ReffuseContext.js" import * as ReffuseContext from "./ReffuseContext.js"
import * as ReffuseRuntime from "./ReffuseRuntime.js" import * as ReffuseRuntime from "./ReffuseRuntime.js"
@@ -75,7 +75,14 @@ export class Reffuse<R> {
): void { ): void {
const runSync = this.useRunSync() const runSync = this.useRunSync()
return React.useEffect(() => { runSync(Effect.scoped(effect)) }, [ return React.useEffect(() => {
const scope = Scope.make().pipe(
Effect.tap(scope => Scope.use(effect, scope)),
runSync,
)
return () => runSync(Scope.close(scope, Exit.void))
}, [
...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync], ...options?.doNotReExecuteOnRuntimeOrContextChange ? [] : [runSync],
...(deps ?? []), ...(deps ?? []),
]) ])