11import * as React from 'react' ;
22import useEvent from './useEvent' ;
3- import useLayoutEffect from './useLayoutEffect' ;
3+ import useLayoutEffect , { useLayoutUpdateEffect } from './useLayoutEffect' ;
44import useState from './useState' ;
55
66type Updater < T > = (
@@ -15,24 +15,6 @@ enum Source {
1515
1616type ValueRecord < T > = [ T , Source , T ] ;
1717
18- const useUpdateEffect : typeof React . useEffect = ( callback , deps ) => {
19- const firstMountRef = React . useRef ( true ) ;
20-
21- useLayoutEffect ( ( ) => {
22- if ( ! firstMountRef . current ) {
23- return callback ( ) ;
24- }
25- } , deps ) ;
26-
27- // We tell react that first mount has passed
28- useLayoutEffect ( ( ) => {
29- firstMountRef . current = false ;
30- return ( ) => {
31- firstMountRef . current = true ;
32- } ;
33- } , [ ] ) ;
34- } ;
35-
3618/** We only think `undefined` is empty */
3719function hasValue ( value : any ) {
3820 return value !== undefined ;
@@ -82,7 +64,7 @@ export default function useMergedState<T, R = T>(
8264 const postMergedValue = postState ? postState ( chosenValue ) : chosenValue ;
8365
8466 // ======================= Sync =======================
85- useUpdateEffect ( ( ) => {
67+ useLayoutUpdateEffect ( ( ) => {
8668 setMergedValue ( ( [ prevValue ] ) => [ value , Source . PROP , prevValue ] ) ;
8769 } , [ value ] ) ;
8870
0 commit comments