Skip to content

Commit 896fff1

Browse files
committed
BREAKING CHANGE Add support for React 18
1 parent d9d4e05 commit 896fff1

File tree

7 files changed

+39
-33
lines changed

7 files changed

+39
-33
lines changed

packages/documentation-framework/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ We publish this theme [on npm.](https://www.npmjs.com/package/@patternfly/docume
2828
This should not be needed, but if you encounter errors installing the above devDependencies, try adding one or more of these resolutions to your package.json file:
2929
```
3030
"resolutions": {
31-
"@types/react": "^16.8.0",
32-
"@types/react-dom": "^16.8.0",
33-
"react": "16.8.0",
34-
"react-dom": "16.8.0",
31+
"@types/react": "^18",
32+
"@types/react-dom": "^18",
33+
"react": "^18",
34+
"react-dom": "^18",
3535
"chromedriver": "102.0.0",
3636
"node-sass": "7.0.1",
3737
"puppeteer": "14.3.0",

packages/documentation-framework/app.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import ReactDOM from 'react-dom';
2+
import { createRoot, hydrateRoot } from 'react-dom/client';
33
import { Router, useLocation } from '@reach/router';
44
import 'client-styles'; // Webpack replaces this import: patternfly-docs.css.js
55
import { SideNavLayout } from '@patternfly/documentation-framework/layouts';
@@ -107,8 +107,15 @@ const isPrerender = process.env.PRERENDER;
107107
// Don't use ReactDOM in SSR
108108
if (!isPrerender) {
109109
function render() {
110-
const renderFn = isProd ? ReactDOM.hydrate : ReactDOM.render;
111-
renderFn(<App />, document.getElementById('root'));
110+
const container = document.getElementById('root');
111+
// TODO: Enable StrictMode: https://reactjs.org/docs/strict-mode.html
112+
const app = <App />;
113+
114+
if (isProd) {
115+
hydrateRoot(container, app);
116+
} else {
117+
createRoot(container).render(app);
118+
}
112119
}
113120
// On first load, await promise for the current page to avoid flashing a "Loading..." state
114121
const Component = getAsyncComponent(null);

packages/documentation-framework/helpers/codesandbox.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,16 @@ function getReactParams(title, code, scope, lang, relativeImports) {
179179
</html>`,
180180
},
181181
[lang === 'ts' ? 'index.tsx' : 'index.js']: {
182-
content: `import ReactDOM from 'react-dom';
182+
content: `import { StrictMode } from "react";
183+
import { createRoot } from "react-dom/client";
183184
import "@patternfly/react-core/dist/styles/base.css";
184185
import './fonts.css';
185186
186187
${code}
187188
188-
const rootElement = document.getElementById("root");
189-
ReactDOM.render(<${toRender} />, rootElement);`
189+
const container = document.getElementById("root");
190+
const root = createRoot(container);
191+
root.render(<StrictMode><${toRender} /></StrictMode>);`
190192
},
191193
'fonts.css': {
192194
content: overpass
@@ -195,8 +197,8 @@ ReactDOM.render(<${toRender} />, rootElement);`
195197
content: {
196198
dependencies: {
197199
...dependencies,
198-
'react': '^16.8.0',
199-
'react-dom': '^16.8.0'
200+
'react': '^18',
201+
'react-dom': '^18'
200202
}
201203
},
202204
},

packages/documentation-framework/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
"@patternfly/react-code-editor": ">=4.43.16",
8282
"@patternfly/react-core": ">=4.202.16",
8383
"@patternfly/react-table": ">=4.71.16",
84-
"react": "^16.8.0 || ^17.0.0",
85-
"react-dom": "^16.8.0 || ^17.0.0"
84+
"react": "^16.8 || ^17 || ^18",
85+
"react-dom": "^16.8 || ^17 || ^18"
8686
}
8787
}

packages/documentation-framework/scripts/webpack/webpack.server.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const serverConfig = () => {
1212
target: 'node', // Load chunks using require
1313
plugins: [
1414
new webpack.DefinePlugin({
15-
'process.env.PRERENDER': true // In app.js don't call ReactDOM.render
15+
'process.env.PRERENDER': true // In app.js don't call render
1616
}),
1717
],
1818
optimization: {

packages/v4/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
"@patternfly/documentation-framework": "^1.3.7",
2121
"@patternfly/quickstarts": "^2.2.4",
2222
"@patternfly/react-docs": "5.103.22",
23-
"react": "^16.8.0 || ^17.0.0",
24-
"react-dom": "^16.8.0 || ^17.0.0"
23+
"react": "^16.8 || ^17 || ^18",
24+
"react-dom": "^16.8 || ^17 || ^18"
2525
},
2626
"devDependencies": {
2727
"@patternfly/patternfly-a11y": "4.3.0",

yarn.lock

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11224,14 +11224,13 @@ [email protected]:
1122411224
node-dir "^0.1.10"
1122511225
strip-indent "^3.0.0"
1122611226

11227-
"react-dom@^16.8.0 || ^17.0.0":
11228-
version "17.0.2"
11229-
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
11230-
integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
11227+
"react-dom@^16.8 || ^17 || ^18":
11228+
version "18.2.0"
11229+
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
11230+
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
1123111231
dependencies:
1123211232
loose-envify "^1.1.0"
11233-
object-assign "^4.1.1"
11234-
scheduler "^0.20.2"
11233+
scheduler "^0.23.0"
1123511234

1123611235
1123711236
version "9.0.0"
@@ -11294,13 +11293,12 @@ react-virtualized@^9.21.1:
1129411293
prop-types "^15.7.2"
1129511294
react-lifecycles-compat "^3.0.4"
1129611295

11297-
"react@^16.8.0 || ^17.0.0":
11298-
version "17.0.2"
11299-
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
11300-
integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
11296+
"react@^16.8 || ^17 || ^18":
11297+
version "18.2.0"
11298+
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
11299+
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
1130111300
dependencies:
1130211301
loose-envify "^1.1.0"
11303-
object-assign "^4.1.1"
1130411302

1130511303
read-cmd-shim@^1.0.1:
1130611304
version "1.0.5"
@@ -11962,13 +11960,12 @@ sax@^1.2.1:
1196211960
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
1196311961
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
1196411962

11965-
scheduler@^0.20.2:
11966-
version "0.20.2"
11967-
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
11968-
integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
11963+
scheduler@^0.23.0:
11964+
version "0.23.0"
11965+
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
11966+
integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
1196911967
dependencies:
1197011968
loose-envify "^1.1.0"
11971-
object-assign "^4.1.1"
1197211969

1197311970
schema-utils@^1.0.0:
1197411971
version "1.0.0"

0 commit comments

Comments
 (0)