@@ -18,9 +18,7 @@ const createProvider = <Value>(OrigProvider: React.Provider<ContextValue<Value>>
18
18
ref . current . value = value ;
19
19
ref . current . listeners . forEach ( ( listener ) => listener ( ) ) ;
20
20
const contextValue = React . useMemo ( ( ) => {
21
- const source = createMutableSource ( ref , {
22
- getVersion : ( ) => ref . current . value ,
23
- } ) ;
21
+ const source = createMutableSource ( ref , ( ) => ref . current . value ) ;
24
22
return { [ SOURCE_SYMBOL ] : source } ;
25
23
} , [ ] ) ;
26
24
return React . createElement ( OrigProvider , { value : contextValue } , children ) ;
@@ -76,28 +74,26 @@ export const useContextSelector = <Value, Selected>(
76
74
if ( ! source ) {
77
75
throw new Error ( 'useContextSelector requires special context' ) ;
78
76
}
79
- const config = React . useMemo ( ( ) => ( {
80
- getSnapshot : (
81
- ref : React . MutableRefObject < { value : Value } > ,
82
- ) => selector ( ref . current . value ) ,
83
- subscribe : (
84
- ref : React . MutableRefObject < { value : Value ; listeners : Set < ( ) => void > } > ,
85
- callback : ( ) => void ,
86
- ) => {
87
- let selected = selector ( ref . current . value ) ;
88
- const listener = ( ) => {
89
- const nextSelected = selector ( ref . current . value ) ;
90
- if ( ! Object . is ( selected , nextSelected ) ) {
91
- callback ( ) ;
92
- selected = nextSelected ;
93
- }
94
- } ;
95
- const { listeners } = ref . current ;
96
- listeners . add ( listener ) ;
97
- return ( ) => listeners . delete ( callback ) ;
98
- } ,
99
- } ) , [ selector ] ) ;
100
- return useMutableSource ( source , config ) ;
77
+ const getSnapshot = React . useCallback ( (
78
+ ref : React . MutableRefObject < { value : Value } > ,
79
+ ) => selector ( ref . current . value ) , [ selector ] ) ;
80
+ const subscribe = React . useCallback ( (
81
+ ref : React . MutableRefObject < { value : Value ; listeners : Set < ( ) => void > } > ,
82
+ callback : ( ) => void ,
83
+ ) => {
84
+ let selected = selector ( ref . current . value ) ;
85
+ const listener = ( ) => {
86
+ const nextSelected = selector ( ref . current . value ) ;
87
+ if ( ! Object . is ( selected , nextSelected ) ) {
88
+ callback ( ) ;
89
+ selected = nextSelected ;
90
+ }
91
+ } ;
92
+ const { listeners } = ref . current ;
93
+ listeners . add ( listener ) ;
94
+ return ( ) => listeners . delete ( callback ) ;
95
+ } , [ selector ] ) ;
96
+ return useMutableSource ( source , getSnapshot , subscribe ) ;
101
97
} ;
102
98
103
99
const identity = < T > ( x : T ) => x ;
0 commit comments