Skip to content

Commit 4e1b551

Browse files
committed
Memoize component
1 parent 5252092 commit 4e1b551

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

src/lib/fragments/AgGrid.react.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ export function DashAgGrid(props) {
272272
const [openGroups, setOpenGroups] = useState({});
273273
const [columnState_push, setColumnState_push] = useState(true);
274274
const [rowTransactionState, setRowTransactionState] = useState(null);
275-
const [parentState] = useState(props.parentState || {});
276275

277276
const components = useMemo(
278277
() => ({
@@ -1706,4 +1705,22 @@ export const defaultProps = DashAgGrid.defaultProps;
17061705
var dagfuncs = (window.dash_ag_grid = window.dash_ag_grid || {});
17071706
dagfuncs.useGridFilter = useGridFilter;
17081707

1709-
export default DashAgGrid;
1708+
const MemoizedAgGrid = React.memo(DashAgGrid, (prevProps, nextProps) => {
1709+
// Check if props are equal (excluding render-specific props)
1710+
const relevantNextProps = { ...omit(OMIT_PROP_RENDER, nextProps) };
1711+
const relevantPrevProps = { ...omit(OMIT_PROP_RENDER, prevProps) };
1712+
1713+
const isInternalChange = nextProps?.dashRenderType === 'internal';
1714+
const propsHaveChanged = !equals(relevantNextProps, relevantPrevProps);
1715+
const rowDataChanged = !equals(nextProps.rowData, prevProps.rowData);
1716+
const selectedRowsChanged = !equals(nextProps.selectedRows, prevProps.selectedRows);
1717+
1718+
if (propsHaveChanged && (!isInternalChange || rowDataChanged || selectedRowsChanged)) {
1719+
return false; // Props changed, re-render
1720+
}
1721+
1722+
return true;
1723+
1724+
});
1725+
1726+
export default MemoizedAgGrid;

src/lib/utils/propCategories.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,10 +317,12 @@ export const PASSTHRU_PROPS = ['rowData'];
317317
* in the render() method, so they don't need to be listed here
318318
*/
319319
export const PROPS_NOT_FOR_AG_GRID = [
320+
'children',
320321
'setProps',
321322
'loading_state',
322323
'enableEnterpriseModules',
323324
'parentState',
325+
'persistence',
324326
'persisted_props',
325327
'persistence_type',
326328
'virtualRowData',
@@ -335,6 +337,7 @@ export const PROPS_NOT_FOR_AG_GRID = [
335337
'alignedGrids',
336338
'resetColumnState',
337339
'exportDataAsCsv',
340+
'selectedRows',
338341
'selectAll',
339342
'deselectAll',
340343
'deleteSelectedRows',
@@ -357,7 +360,6 @@ export const OMIT_PROP_RENDER = [
357360
'virtualRowData',
358361
'columnState',
359362
'filterModel',
360-
'selectedRows',
361363
'getRowRequest',
362364
'getDetailRequest',
363365
'cellValueChanged',

0 commit comments

Comments
 (0)