0.2.1 #26

Merged
Thilawyn merged 144 commits from next into master 2025-12-01 23:37:40 +01:00
Showing only changes of commit 03eca8a1af - Show all commits

View File

@@ -489,18 +489,28 @@ export const useOnMount: {
return yield* React.useState(() => Runtime.runSync(runtime)(Effect.cached(f())))[0] return yield* React.useState(() => Runtime.runSync(runtime)(Effect.cached(f())))[0]
}) })
export namespace useOnChange {
export type Options = useScope.Options
}
export const useOnChange: { export const useOnChange: {
<A, E, R>( <A, E, R>(
f: () => Effect.Effect<A, E, R>, f: () => Effect.Effect<A, E, R>,
deps: React.DependencyList, deps: React.DependencyList,
): Effect.Effect<A, E, R> options?: useOnChange.Options,
): Effect.Effect<A, E, Exclude<R, Scope.Scope>>
} = Effect.fnUntraced(function* <A, E, R>( } = Effect.fnUntraced(function* <A, E, R>(
f: () => Effect.Effect<A, E, R>, f: () => Effect.Effect<A, E, R>,
deps: React.DependencyList, deps: React.DependencyList,
options?: useOnChange.Options,
) { ) {
const runtime = yield* Effect.runtime<R>() const runtime = yield* Effect.runtime<Exclude<R, Scope.Scope>>()
// biome-ignore lint/correctness/useExhaustiveDependencies: use of React.DependencyList const scope = yield* useScope(deps, options)
return yield* React.useMemo(() => Runtime.runSync(runtime)(Effect.cached(f())), deps)
// biome-ignore lint/correctness/useExhaustiveDependencies: only reactive on "scope"
return yield* React.useMemo(() => Runtime.runSync(runtime)(
Effect.cached(Effect.provideService(f(), Scope.Scope, scope))
), [scope])
}) })
export namespace useReactEffect { export namespace useReactEffect {