@@ -10,21 +10,20 @@ export const withLoader = <
1010 Component : Types . ComponentWithLoaderData < P , R > ,
1111 args : Types . WithLoaderArgs < P , R , A >
1212) : Types . Component < P > => {
13- return ( props : P ) => {
13+ let CachedComponent : Types . ComponentWithLoaderData < P , R > ;
14+ const LoaderComponent = ( props : P ) => {
1415 const useLoaderArgs = [ ] ;
1516 if ( args . queriesArg ) {
1617 useLoaderArgs . push ( args . queriesArg ( props ) ) ;
1718 }
1819 const query = args . useLoader (
1920 ...( useLoaderArgs as Types . OptionalGenericArg < A > )
2021 ) ;
21-
22- const ForwardedComponent = React . useCallback (
23- React . forwardRef (
22+ if ( ! CachedComponent ) {
23+ CachedComponent = React . forwardRef (
2424 Component as React . ForwardRefRenderFunction < R , P >
25- ) as unknown as Types . ComponentWithLoaderData < P , R > ,
26- [ ]
27- ) ;
25+ ) as unknown as Types . ComponentWithLoaderData < P , R > ;
26+ }
2827
2928 return (
3029 < RTKLoader
@@ -41,13 +40,27 @@ export const withLoader = <
4140 : undefined
4241 }
4342 onSuccess = { ( data ) => (
44- < ForwardedComponent { ...props } ref = { data } />
43+ < CachedComponent { ...props } ref = { data } />
4544 ) }
45+ whileFetching = {
46+ args . whileFetching
47+ ? {
48+ prepend : args . whileFetching ?. prepend ?.(
49+ props ,
50+ query ?. data
51+ ) ,
52+ append : args . whileFetching ?. prepend ?.(
53+ props ,
54+ query ?. data
55+ ) ,
56+ }
57+ : undefined
58+ }
4659 onFetching = { args ?. onFetching ?.(
4760 props ,
4861 query . data
4962 ? ( ) => (
50- < ForwardedComponent
63+ < CachedComponent
5164 { ...props }
5265 ref = { query . data as R }
5366 />
@@ -57,4 +70,5 @@ export const withLoader = <
5770 />
5871 ) ;
5972 } ;
73+ return LoaderComponent ;
6074} ;
0 commit comments