Skip to content

fix(mui): stabilize useDataGrid filterModel identity#7423

Open
jwgmeligmeyling wants to merge 1 commit into
refinedev:mainfrom
athenagroup:fix/stabilize-filter-model
Open

fix(mui): stabilize useDataGrid filterModel identity#7423
jwgmeligmeyling wants to merge 1 commit into
refinedev:mainfrom
athenagroup:fix/stabilize-filter-model

Conversation

@jwgmeligmeyling
Copy link
Copy Markdown
Contributor

useDataGrid returned dataGridProps.filterModel as a freshly-allocated object on every render, even when the underlying filter state was unchanged. Consumers feeding it into MUI X DataGrid or to useEffect deps keyed on its identity hit unnecessary work and could trigger effect loops in user code.

Wrap the filterModel computation in useMemo keyed on muiCrudFilters, the permanent filters, and the column-type map — mirroring the existing memoization already used for sortModel a few lines above. The column- type map is still tracked via the same useRef as before; including columnsTypes.current in the deps array means the next render after onStateChange reassigns the ref picks up the change, matching the previous per-render computation.

Behavior is otherwise unchanged: the value still updates whenever the underlying filter state — or the DataGrid-reported column types — actually changes.

PR Checklist

Please check if your PR fulfills the following requirements:

Bugs / Features

What is the current behavior?

What is the new behavior?

fixes (issue)

Notes for reviewers

useDataGrid returned dataGridProps.filterModel as a freshly-allocated
object on every render, even when the underlying filter state was
unchanged. Consumers feeding it into MUI X DataGrid or to useEffect deps
keyed on its identity hit unnecessary work and could trigger effect
loops in user code.

Wrap the filterModel computation in useMemo keyed on muiCrudFilters,
the permanent filters, and the column-type map — mirroring the existing
memoization already used for sortModel a few lines above. The column-
type map is still tracked via the same useRef as before; including
columnsTypes.current in the deps array means the next render after
onStateChange reassigns the ref picks up the change, matching the
previous per-render computation.

Behavior is otherwise unchanged: the value still updates whenever the
underlying filter state — or the DataGrid-reported column types —
actually changes.
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 17, 2026

🦋 Changeset detected

Latest commit: d576310

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@refinedev/mui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant