diff --git a/packages/extension-lazyref/src/index.ts b/packages/extension-lazyref/src/index.ts index e5fbb02..18e6aef 100644 --- a/packages/extension-lazyref/src/index.ts +++ b/packages/extension-lazyref/src/index.ts @@ -9,19 +9,17 @@ export const LazyRefExtension = ReffuseExtension.make(() => ({ this: ReffuseHelpers.ReffuseHelpers, ref: LazyRef.LazyRef, ): [A, React.Dispatch>] { - const runSync = this.useRunSync() - - const initialState = React.useMemo(() => runSync(ref), []) + const initialState = this.useMemo(() => ref, [], { doNotReExecuteOnRuntimeOrContextChange: true }) 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 => + const setValue = this.useCallbackSync((setStateAction: React.SetStateAction) => + LazyRef.update(ref, prevState => SetStateAction.value(setStateAction, prevState) - )), + ), [ref]) return [reactStateValue, setValue] diff --git a/packages/extension-query/src/index.ts b/packages/extension-query/src/index.ts index 2694a64..58b8249 100644 --- a/packages/extension-query/src/index.ts +++ b/packages/extension-query/src/index.ts @@ -6,7 +6,7 @@ import { ReffuseExtension, type ReffuseHelpers } from "reffuse" export interface UseQueryProps { - effect(): Effect.Effect + effect: () => Effect.Effect readonly deps?: React.DependencyList } diff --git a/packages/reffuse/src/ReffuseHelpers.ts b/packages/reffuse/src/ReffuseHelpers.ts index 6b8e5df..77b3b6c 100644 --- a/packages/reffuse/src/ReffuseHelpers.ts +++ b/packages/reffuse/src/ReffuseHelpers.ts @@ -388,19 +388,17 @@ export abstract class ReffuseHelpers { this: ReffuseHelpers, ref: SubscriptionRef.SubscriptionRef, ): [A, React.Dispatch>] { - const runSync = this.useRunSync() - - const initialState = React.useMemo(() => runSync(ref), []) + const initialState = this.useMemo(() => ref, [], { doNotReExecuteOnRuntimeOrContextChange: true }) 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(Ref.update(ref, prevState => + const setValue = this.useCallbackSync((setStateAction: React.SetStateAction) => + Ref.update(ref, prevState => SetStateAction.value(setStateAction, prevState) - )), + ), [ref]) return [reactStateValue, setValue]