Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes remix-run/remix#3672.
LocationContext
was using a new object every render, even iflocation
andnavigationType
were the same. React's own docs recommend against this.This update wraps the location context in a
useMemo
just like navigationContext.I know "is this really hurting performance?" comes up often on this type of issue. For us the answer was definitely yes. We had a large data grid (5,000+ cells on the screen) where each cell needed the value of
useLocation
and clicking in a cell caused a fetcher to run. Even when we wrapped the cells inReact.memo()
, running the fetcher still caused every cell to re-render due to the context change. This did cause some noticeable lag on the page.I've been running this patch in production since last summer with no issues.