-
-
Notifications
You must be signed in to change notification settings - Fork 3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mutation Optimistic Update Causes Reference Changes and Unnecessary Rerenders #8382
Comments
when you change an array or object, we try to keep as many references as possible with our That means if you toggle one todo, even though the list is new and even if you’d provide a new copy of each element, only the changed one would re-render. If you delete one item from the list, all other items after that would “compare” with a different item, and we therefor can’t keep the reference. I wouldn’t know how to implement that, I don’t think it’s possible - or do you have an idea? |
@TkDodo thanks for the response. So I have two options? Mutate object or use
|
Have you tried any of the approaches to see if they work, because I don’t think they would. With Mutating the existing cache entry is really dangerous because if you mutate So those are both not real options I’m afraid. |
Describe the bug
When using a mutation for deleting an item from a list with an optimistic response, the implementation causes reference changes for all items following the deleted one. This leads to unnecessary re-renders of components that receive these items as props, even if they use
React.memo
.The issue seems to stem from how the list is updated optimistically (
filter
function creates a new array, causing reference changes for all remaining items).Your minimal, reproducible example
https://stackblitz.com/edit/sb1-tgynyr?file=components%2Ftodo-list.tsx
Steps to reproduce
Expected behavior
When deleting a todo item and updating the list optimistically:
How often does this bug happen?
Every time
Screenshots or Videos
No response
Platform
any
Tanstack Query adapter
react-query
TanStack Query version
v5.62.0
TypeScript version
v5.2.2
Additional context
The issue is due to how the filter function creates a new array and changes references for all subsequent items. This behavior can negatively impact performance in scenarios with a large number of items or deeply nested component trees.
The text was updated successfully, but these errors were encountered: