-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
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
Migrate to React 18 #7264
Comments
Hi, I thought we can incrementally adopt to React 18 which give easy migration process too 😊 if (React.version.includes("18.")) {
if (process.env.NODE_ENV === "production") {
const { hydrateRoot } = require("react-dom/client");
preload(window.location.pathname).then(() => {
hydrateRoot(
document.getElementById("__docusaurus"),
<HelmetProvider>
<BrowserRouter>
<App />
</BrowserRouter>
</HelmetProvider>
);
});
} else {
const { createRoot } = require("react-dom/client");
preload(window.location.pathname).then(() => {
const docReactRoot = createRoot(
document.getElementById("__docusaurus")
);
docReactRoot.render(
<HelmetProvider>
<BrowserRouter>
<App />
</BrowserRouter>
</HelmetProvider>
);
});
}
} else {
const ReactDOM = require("react-dom");
const renderMethod =
process.env.NODE_ENV === "production"
? ReactDOM.hydrate
: ReactDOM.render;
preload(window.location.pathname).then(() => {
renderMethod(
<HelmetProvider>
<BrowserRouter>
<App />
</BrowserRouter>
</HelmetProvider>,
document.getElementById("__docusaurus")
);
});
} In above code we dynamically require the new I am sorry if I made any errors/mistakes :( |
@sanjaiyan-dev That falls under the realm of
I'm not really willing to maintain that code, but it's a nice path nevertheless. Let's wait till v3 is actually on the roadmap to decide what is best for us. |
Yh 💪🙌 |
So react 18 would never be supported on V2? only on the future version, Docusaurus V3? There are some really nice features in React18. |
We hope to release Docusaurus v3 very quickly. According to our release doc, it should be within a few months, so you should not worry about it too much. React 18 will be a major change, so no, it will not be backported. Also, we have abstracted all the build pipeline, and we hope you could develop without caring about the underlying plumbing infra. |
When can we expect the first canary release that uses React 18? Saw that you have |
- facebook/docusaurus#7264 - docusaurus does not support react18 yet
* fix(@h6s/website): revert bump react18 - facebook/docusaurus#7264 - docusaurus does not support react18 yet * fix(@h6s-examples/react): resolve react18 warning - update chakra-ui * chore(@h6s-examples/react): chakra-ui breaking change migration
Hi! I have a problem that I think is related to this issue.
I noticed that I tried to replicate it on my project, but wasn't successful. Does someone understand how they did it? Thank you in advance. |
Just disable strict peer dependencies. If you're on pnpm, create a |
@juliusmarminge thanks for the guidance! |
Would also love to know if there's an updated timeline somewhere for support. Wasn't able to come up with branches / tags to look at. Would be happy to play the guinea pig here! (we're actually "dependent" on React 18, because we'd love to integrate https://github.com/pacocoursey/cmdk with our docs) |
Is a contribution needed here to keep this item moving forward? I'd be happy to commit to this, as the peer deps poses problems for monorepos in particular. |
@Sonic12040 React 18 and MDX2 are aimed at being supported with V3: #8469 |
Thanks for that. I'll see what's open to contribute to 3.0! |
Have you read the Contributing Guidelines on issues?
For site maintainers
Upgrading to React 18 is optional—it won't break anything, but it won't do anything either. Until Docusaurus uses the new
createRoot
API, the site's behavior will still be the same as that in React 17. However, you may be able to use a few React 18 niceties likeuseId()
(which I'm personally excited about for accessibility reasons).If your dependency management bot wants to upgrade to React 18 for you, and it doesn't cause any problems (around peer dependencies), feel free to accept it.
Motivation
Unlike React 17, React 18 contains actual API changes that may not be backward-compatible (i.e. you can't take a React 18 program and expect it to run in a project installed with React 17). Therefore, migration to React 18 can only happen along two paths:
createRoot
API, and throw an early error for anyone still installed withreact@17
, telling them to update their package.json.ReactDOM.render
orcreateRoot
based on the version.It is not good to move forward with either solution.
We have some preliminary work done in #7102, but it's far from being complete, and gets stalled in multiple places. The resolution is that as the 2.0 release is approaching, we'll likely stay on React 17 because the truth is, even many libraries are not fully prepared for React 18 yet! React 18 will be considered a breaking change and will come in v3.
The most urgent blocking issue is that MDX v1 doesn't declare React v18 in its peer dependencies range. Because the v1 line is effectively frozen, I believe there's no plan to fix this. Certain package managers (namely, npm v7 and pnpm) are strict about peer dependencies and will refuse to install properly if
@mdx-js/react
is installed alongsidereact@18
. This will be confusing for the users, so it's another strong point why we'll delay it to v3: we'll only migrate to MDX v2 in Docusaurus v3 (#4029).Since I don't think React 18 actually removed any API, there's not much we need to do on the code side. It's only about dependencies. Still, it would be nice if we can remove
react-loadable
(#3841), because it uses the deprecatedcomponentWillMount
lifecycle and prevents us from opting intoStrictMode
. Also, React 18 will bring support for new SSG APIs (including server-renderingSuspense
), and we'll want to take the opportunity of prolonged migration time window to look into that as well.Self-service
The text was updated successfully, but these errors were encountered: