diff --git a/src/internal/react-enhancer.ts b/src/internal/react-enhancer.ts index 2aecbb77..2584d025 100644 --- a/src/internal/react-enhancer.ts +++ b/src/internal/react-enhancer.ts @@ -11,9 +11,9 @@ const reactEnhancer = ( delayTime: number, ): BehaviorObservable => { let finalizeLastUnsubscription = noop - let latestValue = EMPTY_VALUE const result = new Observable(subscriber => { let isActive = true + let latestValue = EMPTY_VALUE const subscription = source$.subscribe({ next(value) { if ( @@ -97,7 +97,6 @@ const reactEnhancer = ( } if (value !== EMPTY_VALUE) { - latestValue = value return (valueResult = { type: "v", payload: value }) } diff --git a/src/internal/useObservable.ts b/src/internal/useObservable.ts index 0cf25968..7c8f0252 100644 --- a/src/internal/useObservable.ts +++ b/src/internal/useObservable.ts @@ -8,13 +8,16 @@ const SUSP: "s" = "s" type Action = "e" | "v" | "s" const reducer = ( - _: { type: Action; payload: any }, + current: { type: Action; payload: any }, action: { type: Action; payload: any }, ) => { if (action.type === ERROR) { throw action.payload } - return action + return Object.is(current.payload, action.payload) && + current.type === action.type + ? current + : action } const init = (source$: BehaviorObservable) => source$.getValue()