Add View.useFromReactiveValues (#78)
## Summary - Add `View.useFromReactiveValues`, a `View`-side counterpart to `Lens.useFromReactState`: exposes a React dependency list (values that change across renders) as a live-updating `View`, backed by a `SubscriptionRef` kept in sync via `useReactEffect`. ## Test plan - [x] `bun run lint:tsc` - [x] `bun run lint:biome` - [x] `bun run test` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Julien Valverdé <julien.valverde@mailo.com> Reviewed-on: #78
This commit was merged in pull request #78.
This commit is contained in:
1 parent
19ae5a366d
commit
7f2782676b
2 files changed
+15
-3
No files matched your search
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "effect-view",
|
||||
"description": "Write React function components with Effect",
|
||||
"version": "0.1.6",
|
||||
"version": "0.1.7",
|
||||
"type": "module",
|
||||
"files": [
|
||||
"./README.md",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Effect, Equivalence, Stream } from "effect"
|
||||
import { View } from "effect-lens"
|
||||
import { Effect, Equivalence, Stream, SubscriptionRef } from "effect"
|
||||
import { Lens, View } from "effect-lens"
|
||||
import * as React from "react"
|
||||
import * as Component from "./Component.js"
|
||||
|
||||
@@ -40,3 +40,15 @@ export const useAll = Effect.fnUntraced(function* <const T extends readonly View
|
||||
|
||||
return reactStateValue as any
|
||||
})
|
||||
|
||||
export const useFromReactiveValues = Effect.fnUntraced(function* <const A extends React.DependencyList>(
|
||||
values: A,
|
||||
): Effect.fn.Return<View.View<A, never, never>> {
|
||||
const lens = yield* Component.useOnMount(() => Effect.map(
|
||||
SubscriptionRef.make(values),
|
||||
Lens.fromSubscriptionRef,
|
||||
))
|
||||
|
||||
yield* Component.useReactEffect(() => Lens.set(lens, values), values)
|
||||
return lens
|
||||
})
|
||||
Reference in new issue
Block a user