npm package diff

Package: react-rx

Versions: 4.0.1 - 4.1.0-canary.5

File: package/src/useObservable.ts

Index: package/src/useObservable.ts
===================================================================
--- package/src/useObservable.ts
+++ package/src/useObservable.ts
@@ -1,5 +1,5 @@
-import {useMemo, useSyncExternalStore} from 'react'
+import {useCallback, useSyncExternalStore} from 'react'
 import {
   asapScheduler,
   catchError,
   finalize,
@@ -66,31 +66,28 @@
     subscription.unsubscribe()
 
     cache.set(observable, entry as CacheRecord<ObservedValueOf<ObservableType>>)
   }
+  const instance = cache.get(observable)!
 
-  const store = useMemo(() => {
-    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-    const instance = cache.get(observable)!
-    return {
-      subscribe: (onStoreChange: () => void) => {
-        const subscription = instance.observable.subscribe(onStoreChange)
-        return () => {
-          subscription.unsubscribe()
-        }
-      },
-      getSnapshot: () => {
-        if (instance.error) {
-          throw instance.error
-        }
-        return instance.snapshot
-      },
-    }
-  }, [observable])
+  const subscribe = useCallback(
+    (onStoreChange: () => void) => {
+      const subscription = instance.observable.subscribe(onStoreChange)
+      return () => {
+        subscription.unsubscribe()
+      }
+    },
+    [instance.observable],
+  )
 
   return useSyncExternalStore<ObservedValueOf<ObservableType>>(
-    store.subscribe,
-    store.getSnapshot,
+    subscribe,
+    () => {
+      if (instance.error) {
+        throw instance.error
+      }
+      return instance.snapshot
+    },
     typeof initialValue === 'undefined'
       ? undefined
       : () => getValue(initialValue) as ObservedValueOf<ObservableType>,
   )