Fix hydration of components inside <Suspense>
#2633
Merged
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.
Previously, when dealing with SSR, we had a hook that would basically force a re-render of all components on page load. This also used some global state so we didn't unnecessarily cause re-renders for components that were mounting after the page had already loaded.
However, because
<Suspense>
delays hydration this is no longer a viable solution. Thankfully most of our components don't have to do much in the way of "differences" when rendering on the server. The main exceptions are our internal<Portal>
component and the<Transition>
component.We've implemented some component specific tweaks for those and removed the rest of the uses of that hook to work around this problem. Now, it only matters technically, with our internal version of
useId
for React < 18 which doesn't have Suspense — meaning there's no hydration problems there.Fixes #2400