@@ -3,6 +3,7 @@ import Controller from '../Controller'
3
3
import { Constructor , InferStateType , StateCompare } from '../types'
4
4
import { useBuilder } from './useBuilder'
5
5
import { useControllerResolver } from './useControllerResolver'
6
+ import { isEqual } from '../utils'
6
7
7
8
function useSelector < C extends Controller < InferStateType < C > > , T > (
8
9
ctor : Constructor < C > ,
@@ -24,11 +25,21 @@ function useSelector<C extends Controller<InferStateType<C>>, T>(
24
25
const controller = useControllerResolver ( source )
25
26
const buildWhenCallback = useCallback (
26
27
( 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
+ }
28
33
} ,
29
34
[ selector , stateCompare ] ,
30
35
)
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 )
32
43
if ( source instanceof Controller ) {
33
44
return selector ( state )
34
45
}
0 commit comments