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

Clerk causes hydration errors when used with Remix's streaming (defer()). #3908

Open
4 tasks done
tavoyne opened this issue Aug 6, 2024 · 2 comments
Open
4 tasks done
Assignees
Labels
bug Something isn't working

Comments

@tavoyne
Copy link

tavoyne commented Aug 6, 2024

Preliminary Checks

Reproduction

https://github.com/tavoyne/clerk-error

Publishable key

pk_test_Y2xvc2luZy1lbGstOTcuY2xlcmsuYWNjb3VudHMuZGV2JA

Description

If you try to load the home page, you'll see the following error in the console:

Error: This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition.
    at updateDehydratedSuspenseComponent (chunk-3IHV7RO6.js?v=cfe72da2:15345:56)
    at updateSuspenseComponent (chunk-3IHV7RO6.js?v=cfe72da2:15118:24)
    at beginWork (chunk-3IHV7RO6.js?v=cfe72da2:15939:22)
    at beginWork$1 (chunk-3IHV7RO6.js?v=cfe72da2:19753:22)
    at performUnitOfWork (chunk-3IHV7RO6.js?v=cfe72da2:19198:20)
    at workLoopSync (chunk-3IHV7RO6.js?v=cfe72da2:19137:13)
    at renderRootSync (chunk-3IHV7RO6.js?v=cfe72da2:19116:15)
    at performConcurrentWorkOnRoot (chunk-3IHV7RO6.js?v=cfe72da2:18678:83)
    at workLoop (chunk-3IHV7RO6.js?v=cfe72da2:197:42)
    at flushWork (chunk-3IHV7RO6.js?v=cfe72da2:176:22)

This hydration error causes the entire component tree to be re-rendered.

When you remove the ClerkApp() HOC in root.tsx, the document is properly hydrated and the error disappears.

This also happens in production.

Environment

System:
  OS: macOS 14.1
  CPU: (16) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
  Memory: 2.25 GB / 32.00 GB
  Shell: 5.9 - /bin/zsh
Binaries:
  Node: 20.9.0 - ~/.nvm/versions/node/v20.9.0/bin/node
  npm: 10.1.0 - ~/.nvm/versions/node/v20.9.0/bin/npm
Browsers:
  Chrome: 127.0.6533.89
  Chrome Canary: 129.0.6640.0
  Safari: 17.1
@tavoyne tavoyne added the needs-triage A ticket that needs to be triaged by a team member label Aug 6, 2024
@linear linear bot added bug Something isn't working and removed needs-triage A ticket that needs to be triaged by a team member labels Aug 9, 2024
@anagstef anagstef self-assigned this Aug 20, 2024
@anagstef
Copy link
Member

Hello @tavoyne! Thank you for opening this issue.

I can see that relevant hydration issues in Remix are resolved with a Canary version of React. 🤔
Can you please try installing React 19 RC and see if the issue persists?

npm i react@rc react-dom@rc

If you can't use React 19 due to dependency restrictions, try the following:

"dependencies": {
  "react": "18.3.0-canary-a870b2d54-20240314",
  "react-dom": "18.3.0-canary-a870b2d54-20240314",
},
"overrides": {
  "react": "18.3.0-canary-a870b2d54-20240314",
  "react-dom": "18.3.0-canary-a870b2d54-20240314"
},

I tried with your provided repository and it seems that the error goes away, but maybe you could try in your main project and see if it resolves the issues.

references:

@tavoyne
Copy link
Author

tavoyne commented Sep 21, 2024

Hey @anagstef,

React 19 doesn’t "fix" the issue; it just has a different way of dealing with hydration errors.

There’s still a hydration error underneath, and that is the problem. This can be observed with a spinner as the error resets it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants