From 5b5b138a53c03c5cf704e73cc7ce324ca7a8776e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Oliva?= Date: Tue, 14 Jul 2020 18:20:24 +0200 Subject: [PATCH] fix(connectObservable): fix updates on more than one component --- src/internal/react-enhancer.ts | 3 +-- src/internal/useObservable.ts | 7 +++++-- 2 files changed, 6 insertions(+), 4 deletions(-) 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()