Skip to content

Commit 20caf40

Browse files
committed
WIP throw from render passing
1 parent e0473d3 commit 20caf40

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

src/hooks/useSelector.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type { uSESWS } from '../utils/useSyncExternalStore'
1010
import { notInitialized } from '../utils/useSyncExternalStore'
1111
import { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'
1212
import { createCache } from '../utils/autotracking/autotracking'
13+
import { CacheWrapper } from '../utils/Subscription'
1314

1415
export type CheckFrequency = 'never' | 'once' | 'always'
1516

@@ -150,10 +151,17 @@ export function createSelectorHook(context = ReactReduxContext): UseSelector {
150151
const cache = useMemo(() => {
151152
const cache = createCache(() => {
152153
console.log('Wrapper cache called: ', store.getState())
153-
return latestWrappedSelectorRef.current(trackingNode.proxy as TState)
154+
//return latestWrappedSelectorRef.current(trackingNode.proxy as TState)
155+
return wrappedSelector(trackingNode.proxy as TState)
154156
})
155157
return cache
156-
}, [trackingNode])
158+
}, [trackingNode, wrappedSelector])
159+
160+
const cacheWrapper = useRef({ cache } as CacheWrapper)
161+
162+
useIsomorphicLayoutEffect(() => {
163+
cacheWrapper.current.cache = cache
164+
})
157165

158166
const subscribeToStore = useMemo(() => {
159167
const subscribeToStore = (onStoreChange: () => void) => {
@@ -164,7 +172,7 @@ export function createSelectorHook(context = ReactReduxContext): UseSelector {
164172
// console.log('Subscribing to store with tracking')
165173
return subscription.addNestedSub(wrappedOnStoreChange, {
166174
trigger: 'tracked',
167-
cache,
175+
cache: cacheWrapper.current,
168176
})
169177
}
170178
return subscribeToStore

src/utils/Subscription.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ import { updateNode } from './autotracking/proxy'
1515

1616
type VoidFunc = () => void
1717

18+
export interface CacheWrapper {
19+
cache: TrackingCache
20+
}
21+
1822
type Listener = {
1923
callback: VoidFunc
2024
next: Listener | null
2125
prev: Listener | null
2226
trigger: 'always' | 'tracked'
23-
selectorCache?: TrackingCache
24-
subscriberCache?: TrackingCache
27+
selectorCache?: CacheWrapper
2528
}
2629

2730
function createListenerCollection() {
@@ -42,7 +45,7 @@ function createListenerCollection() {
4245
while (listener) {
4346
//console.log('Listener: ', listener)
4447
if (listener.trigger == 'tracked') {
45-
if (listener.selectorCache!.needsRecalculation()) {
48+
if (listener.selectorCache!.cache.needsRecalculation()) {
4649
console.log('Calling subscriber due to recalc need')
4750
// console.log(
4851
// 'Calling subscriber due to recalc. Revision before: ',
@@ -128,7 +131,7 @@ type ListenerCollection = ReturnType<typeof createListenerCollection>
128131

129132
interface AddNestedSubOptions {
130133
trigger: 'always' | 'tracked'
131-
cache?: TrackingCache
134+
cache?: CacheWrapper
132135
}
133136

134137
export interface Subscription {

test/hooks/useSelector.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -600,8 +600,8 @@ describe('React', () => {
600600
expect(() => {
601601
rtl.act(() => {
602602
console.log('Dispatching update')
603-
//normalStore.dispatch({ type: '' })
604-
forceParentRender()
603+
normalStore.dispatch({ type: '' })
604+
//forceParentRender()
605605
})
606606
}).toThrowError()
607607

0 commit comments

Comments
 (0)