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

fix(gatsby): re-render route when location state changes #28346

Merged

Conversation

WillMayger
Copy link
Contributor

@WillMayger WillMayger commented Nov 28, 2020

Description

Fix for issue: Using navigate() function with a state change doesn't re-render the page #27617

Currently we are comparing location props in the RouteUpdates component to see if it needs to be updated, however because we are comparing props we need to also check if the location state has been changed as well.

We can do this by:

  1. Checking if it is equal to null or not
  2. Checking if the state key property has changed between the previous and next set of props.

The key prop is always added to each route state update via @reach/router here.

This seems to be part of a bigger issue where in an ideal world we should probably just leave these comparisons to the router lib, but changing it now may introduce bugs and would probably fall under another issue/ticket.

If others agree and an issue is created for it, I will happily take a look into it.

E2E tests added

Related Issues

Fixes #27617

@gatsbot gatsbot bot added the status: triage needed Issue or pull request that need to be triaged and assigned to a reviewer label Nov 28, 2020
@WillMayger WillMayger marked this pull request as ready for review November 28, 2020 15:26
@LekoArts LekoArts added topic: reach/router and Links and removed status: triage needed Issue or pull request that need to be triaged and assigned to a reviewer labels Nov 30, 2020
@WillMayger WillMayger force-pushed the fix-gatsby-#27617-navigation-state branch from ecde70e to 6c6d742 Compare December 1, 2020 18:03
@vladar vladar changed the title Fix gatsby #27617 navigation state fix(gatsby): re-render route when location state changes Dec 1, 2020
@vladar vladar added topic: core Relates to Gatsby's core (e.g. page loading, reporter, state machine) and removed topic: reach/router and Links labels Dec 1, 2020
Copy link
Contributor

@vladar vladar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome! I've tested it with the repro and it works! Thank you so much for the fix and tests 👍🚢

@vladar vladar added the bot: merge on green Gatsbot will merge these PRs automatically when all tests passes label Dec 1, 2020
@gatsbybot gatsbybot merged commit 3ccaec8 into gatsbyjs:master Dec 1, 2020
pieh pushed a commit that referenced this pull request Dec 4, 2020
* creating e2e tests to catch issue

* comparing location and state

* update test message

* using optional chaining

(cherry picked from commit 3ccaec8)
pieh pushed a commit that referenced this pull request Dec 4, 2020
* creating e2e tests to catch issue

* comparing location and state

* update test message

* using optional chaining

(cherry picked from commit 3ccaec8)
pieh pushed a commit that referenced this pull request Dec 4, 2020
…8476)

* creating e2e tests to catch issue

* comparing location and state

* update test message

* using optional chaining

(cherry picked from commit 3ccaec8)

Co-authored-by: Will Mayger <will@mayger.dev>
@pieh
Copy link
Contributor

pieh commented Dec 7, 2020

Published in gatsby@2.28.1

pragmaticpat pushed a commit to pragmaticpat/gatsby that referenced this pull request Apr 28, 2022
)

* creating e2e tests to catch issue

* comparing location and state

* update test message

* using optional chaining
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bot: merge on green Gatsbot will merge these PRs automatically when all tests passes topic: core Relates to Gatsby's core (e.g. page loading, reporter, state machine)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Using navigate() function with a state change doesn't rerender the page
5 participants