Skip to content

Commit a42d75f

Browse files
authored
Merge pull request #57 from janczizikow/feat/memoized-callbacks
memoize returned callbacks of useModal
2 parents b5d555a + 57c0a05 commit a42d75f

File tree

1 file changed

+41
-25
lines changed

1 file changed

+41
-25
lines changed

src/index.tsx

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* @module NiceModal
1212
* */
1313

14-
import React, { useEffect, useMemo, useContext, useReducer, ReactNode } from 'react';
14+
import React, { useEffect, useCallback, useContext, useReducer, ReactNode } from 'react';
1515

1616
export interface NiceModalState {
1717
id: string;
@@ -305,30 +305,46 @@ export function useModal(modal?: any, args?: any): any {
305305

306306
const modalInfo = modals[mid];
307307

308-
return useMemo<NiceModalHandler>(
309-
() => ({
310-
id: mid,
311-
args: modalInfo?.args,
312-
visible: !!modalInfo?.visible,
313-
keepMounted: !!modalInfo?.keepMounted,
314-
show: (args?: Record<string, unknown>) => show(mid, args),
315-
hide: () => hide(mid),
316-
remove: () => remove(mid),
317-
resolve: (args?: unknown) => {
318-
modalCallbacks[mid]?.resolve(args);
319-
delete modalCallbacks[mid];
320-
},
321-
reject: (args?: unknown) => {
322-
modalCallbacks[mid]?.reject(args);
323-
delete modalCallbacks[mid];
324-
},
325-
resolveHide: (args?: unknown) => {
326-
hideModalCallbacks[mid]?.resolve(args);
327-
delete hideModalCallbacks[mid];
328-
},
329-
}),
330-
[mid, modalInfo?.args, modalInfo?.keepMounted, modalInfo?.visible],
308+
const showCallback = useCallback(
309+
(args?: Record<string, unknown>) => show(mid, args),
310+
[mid]
331311
);
312+
const hideCallback = useCallback(() => hide(mid), [mid]);
313+
const removeCallback = useCallback(() => remove(mid), [mid]);
314+
const resolveCallback = useCallback(
315+
(args?: unknown) => {
316+
modalCallbacks[mid]?.resolve(args);
317+
delete modalCallbacks[mid];
318+
},
319+
[mid]
320+
);
321+
const rejectCallback = useCallback(
322+
(args?: unknown) => {
323+
modalCallbacks[mid]?.reject(args);
324+
delete modalCallbacks[mid];
325+
},
326+
[mid]
327+
);
328+
const resolveHide = useCallback(
329+
(args?: unknown) => {
330+
hideModalCallbacks[mid]?.resolve(args);
331+
delete hideModalCallbacks[mid];
332+
},
333+
[mid]
334+
);
335+
336+
return {
337+
id: mid,
338+
args: modalInfo?.args,
339+
visible: !!modalInfo?.visible,
340+
keepMounted: !!modalInfo?.keepMounted,
341+
show: showCallback,
342+
hide: hideCallback,
343+
remove: removeCallback,
344+
resolve: resolveCallback,
345+
reject: rejectCallback,
346+
resolveHide,
347+
};
332348
}
333349
export const create = <P extends Record<string, unknown>>(
334350
Comp: React.ComponentType<P>,
@@ -351,7 +367,7 @@ export const create = <P extends Record<string, unknown>>(
351367
return () => {
352368
delete ALREADY_MOUNTED[id];
353369
};
354-
}, [id]); //eslint-disable-line
370+
}, [id, show, defaultVisible]);
355371

356372
useEffect(() => {
357373
if (keepMounted) setFlags(id, { keepMounted: true });

0 commit comments

Comments
 (0)