Skip to content
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

Wrap LocationContext in useMemo #10122

Closed
wants to merge 2 commits into from
Closed

Conversation

dmarkow
Copy link
Contributor

@dmarkow dmarkow commented Feb 21, 2023

Fixes remix-run/remix#3672. LocationContext was using a new object every render, even if location and navigationType 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 in React.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.

@changeset-bot
Copy link

changeset-bot bot commented Feb 21, 2023

⚠️ No Changeset found

Latest commit: 771afa6

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

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

@remix-cla-bot
Copy link
Contributor

remix-cla-bot bot commented Feb 21, 2023

Hi @dmarkow,

Welcome, and thank you for contributing to React Router!

Before we consider your pull request, we ask that you sign our Contributor License Agreement (CLA). We require this only once.

You may review the CLA and sign it by adding your name to contributors.yml.

Once the CLA is signed, the CLA Signed label will be added to the pull request.

If you have already signed the CLA and received this response in error, or if you have any questions, please contact us at hello@remix.run.

Thanks!

- The Remix team

@remix-cla-bot
Copy link
Contributor

remix-cla-bot bot commented Feb 21, 2023

Thank you for signing the Contributor License Agreement. Let's get this merged! 🥳

@brophdawg11
Copy link
Contributor

This is a subset of #9983 which I've been meaning to get to but have been busy with some other stuff. The only concern of mine in the other one is the need for the useBlocker change to fix breaking tests so I wanted to dig into that a bit deeper. I'll try to look into both this AM

@brophdawg11 brophdawg11 self-assigned this Feb 22, 2023
@brophdawg11
Copy link
Contributor

I combined this useMemo into #9983

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

Successfully merging this pull request may close these issues.

None yet

3 participants