From 37cfcf6714d383f6b9895d0a507a80f75310ca60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 22 Jan 2025 01:25:39 +0100 Subject: [PATCH] useLazyRefState --- bun.lockb | Bin 152424 -> 152816 bytes packages/reffuse/package.json | 1 + packages/reffuse/src/Reffuse.ts | 29 ++++++++++++++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index ea854204c0c64f0ae4a18816aaeeca67a4f65389..2cfc90528c15b61d8655bc431e6e72d3aa365735 100755 GIT binary patch delta 29441 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 MQWO28t6~5D0~z%ri~s-t delta 29043 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 E2TP=)>Hq)$ diff --git a/packages/reffuse/package.json b/packages/reffuse/package.json index e07c985..e0eb37d 100644 --- a/packages/reffuse/package.json +++ b/packages/reffuse/package.json @@ -29,6 +29,7 @@ "clean:node": "rm -rf node_modules" }, "devDependencies": { + "@typed/lazy-ref": "^0.3.3", "@types/react": "^19.0.4", "effect": "^3.12.1", "react": "^19.0.0" diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts index 011c9aa..389601f 100644 --- a/packages/reffuse/src/Reffuse.ts +++ b/packages/reffuse/src/Reffuse.ts @@ -1,3 +1,4 @@ +import * as LazyRef from "@typed/lazy-ref" import { Context, Effect, ExecutionStrategy, Exit, Fiber, Ref, Runtime, Scope, Stream, SubscriptionRef } from "effect" import React from "react" import * as ReffuseContext from "./ReffuseContext.js" @@ -316,7 +317,7 @@ export class Reffuse { /** * Binds the state of a `SubscriptionRef` to the state of the React component. * - * Returns a [value, setter] tuple just like `React.useState` and triggers a re-render everytime the value of the ref changes. + * Returns a [value, setter] tuple just like `React.useState` and triggers a re-render everytime the value held by the ref changes. * * Note that the rules of React's immutable state still apply: updating a ref with the same value will not trigger a re-render. */ @@ -339,6 +340,32 @@ export class Reffuse { return [reactStateValue, setValue] } + /** + * Binds the state of a `LazyRef` from the `@typed/lazy-ref` package to the state of the React component. + * + * Returns a [value, setter] tuple just like `React.useState` and triggers a re-render everytime the value held by the ref changes. + * + * Note that the rules of React's immutable state still apply: updating a ref with the same value will not trigger a re-render. + */ + useLazyRefState(ref: LazyRef.LazyRef): [A, React.Dispatch>] { + const runSync = this.useRunSync() + + const initialState = React.useMemo(() => runSync(ref), []) + const [reactStateValue, setReactStateValue] = React.useState(initialState) + + this.useFork(Stream.runForEach(ref.changes, v => Effect.sync(() => + setReactStateValue(v) + )), [ref]) + + const setValue = React.useCallback((setStateAction: React.SetStateAction) => + runSync(LazyRef.update(ref, prevState => + SetStateAction.value(setStateAction, prevState) + )), + [ref]) + + return [reactStateValue, setValue] + } + }