Skip to content

Commit 9988894

Browse files
committed
fix useSelector
1 parent 1fca6d7 commit 9988894

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/hooks/useSelector.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Controller from '../Controller'
33
import { Constructor, InferStateType, StateCompare } from '../types'
44
import { useBuilder } from './useBuilder'
55
import { useControllerResolver } from './useControllerResolver'
6+
import { isEqual } from '../utils'
67

78
function useSelector<C extends Controller<InferStateType<C>>, T>(
89
ctor: Constructor<C>,
@@ -24,11 +25,21 @@ function useSelector<C extends Controller<InferStateType<C>>, T>(
2425
const controller = useControllerResolver(source)
2526
const buildWhenCallback = useCallback(
2627
(prev: InferStateType<C>, curr: InferStateType<C>) => {
27-
return stateCompare?.(selector(prev), selector(curr)) ?? true
28+
if (stateCompare === undefined) {
29+
return !isEqual(selector(prev), selector(curr))
30+
} else {
31+
return !stateCompare(selector(prev), selector(curr))
32+
}
2833
},
2934
[selector, stateCompare],
3035
)
31-
const state = useBuilder(controller, buildWhenCallback)
36+
const stateCompareCallback = useCallback(
37+
(prev: InferStateType<C>, curr: InferStateType<C>) => {
38+
return !buildWhenCallback(prev, curr)
39+
},
40+
[buildWhenCallback],
41+
)
42+
const state = useBuilder(controller, buildWhenCallback, stateCompareCallback)
3243
if (source instanceof Controller) {
3344
return selector(state)
3445
}

0 commit comments

Comments
 (0)