@@ -2,6 +2,7 @@ import { DependencyList, useEffect, useRef, useState } from 'react';
22import { debounce , isObject , throttle } from 'lodash' ;
33import { v4 } from 'uuid' ;
44import call from '../utils/call' ;
5+ import useAutoRef from './useAutoRef' ;
56
67interface NoResult {
78 _noResult : string ;
@@ -11,21 +12,22 @@ const isNoResult = <T>(value: T | NoResult, noResult: NoResult): value is NoResu
1112 return isObject ( value ) && '_noResult' in value && value . _noResult === noResult . _noResult ;
1213} ;
1314
14- type MemoFactory < P , R > = ( params : P , noResult : NoResult ) => R | NoResult ;
15+ type MemoFactory < R > = ( noResult : NoResult ) => R | NoResult ;
1516
1617const createDebouncedMemoHook =
1718 ( debounceFn : typeof debounce ) =>
18- < P , R > ( params : P , factory : MemoFactory < P , R > , deps : DependencyList | undefined , wait ?: number ) => {
19+ < R > ( factory : MemoFactory < R > , deps : DependencyList | undefined , wait ?: number ) => {
1920 const [ value , setValue ] = useState < R > ( ) ;
21+ const factoryRef = useAutoRef ( factory ) ;
2022
2123 const debounceFunction = useRef (
2224 call ( ( ) => {
2325 const actualNoResult : NoResult = {
2426 _noResult : v4 ( )
2527 } ;
2628
27- return debounceFn ( ( params : P ) => {
28- const value = factory ( params , actualNoResult ) ;
29+ return debounceFn ( ( ) => {
30+ const value = factoryRef . current ( actualNoResult ) ;
2931
3032 if ( ! isNoResult ( value , actualNoResult ) ) {
3133 setValue ( value ) ;
@@ -35,7 +37,7 @@ const createDebouncedMemoHook =
3537 ) . current ;
3638
3739 useEffect ( ( ) => {
38- debounceFunction ( params ) ;
40+ debounceFunction ( ) ;
3941 } , deps ) ;
4042
4143 return value ;
0 commit comments