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>,
)