From ce05cf36b46d07401c653ea7fb7b27c623ca0254 Mon Sep 17 00:00:00 2001 From: Josep M Sobrepere Date: Wed, 14 Oct 2020 19:11:30 +0200 Subject: [PATCH] fix(core): ensure the same observable on useObservable --- packages/core/src/bind/connectFactoryObservable.ts | 2 +- packages/core/src/bind/connectObservable.ts | 4 +++- packages/core/src/internal/useObservable.ts | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/core/src/bind/connectFactoryObservable.ts b/packages/core/src/bind/connectFactoryObservable.ts index 2232861..6553d12 100644 --- a/packages/core/src/bind/connectFactoryObservable.ts +++ b/packages/core/src/bind/connectFactoryObservable.ts @@ -80,7 +80,7 @@ export default function connectFactoryObservable( return [ (...input: A) => { const [source$, getValue] = getSharedObservables$(input) - return useObservable(source$, getValue) + return useObservable(source$, getValue, input) }, (...input: A) => getSharedObservables$(input)[0], ] diff --git a/packages/core/src/bind/connectObservable.ts b/packages/core/src/bind/connectObservable.ts index 7a20156..4f711a5 100644 --- a/packages/core/src/bind/connectObservable.ts +++ b/packages/core/src/bind/connectObservable.ts @@ -18,9 +18,11 @@ import { useObservable } from "../internal/useObservable" * subscription, then the hook will leverage React Suspense while it's waiting * for the first value. */ +const emptyArr: Array = [] export default function connectObservable(observable: Observable) { const sharedObservable$ = shareLatest(observable, false) const getValue = reactEnhancer(sharedObservable$) - const useStaticObservable = () => useObservable(sharedObservable$, getValue) + const useStaticObservable = () => + useObservable(sharedObservable$, getValue, emptyArr) return [useStaticObservable, sharedObservable$] as const } diff --git a/packages/core/src/internal/useObservable.ts b/packages/core/src/internal/useObservable.ts index 50e6658..680cdd3 100644 --- a/packages/core/src/internal/useObservable.ts +++ b/packages/core/src/internal/useObservable.ts @@ -6,6 +6,7 @@ import { Observable } from "rxjs" export const useObservable = ( source$: Observable, getValue: () => O, + keys: Array, ): Exclude => { const [state, setState] = useState(getValue) const prevStateRef = useRef O)>(state) @@ -37,7 +38,7 @@ export const useObservable = ( t.unsubscribe() return () => subscription.unsubscribe() - }, [source$]) + }, keys) return state as Exclude }