diff --git a/packages/html-reporter/src/index.tsx b/packages/html-reporter/src/index.tsx
index 3fedf4938a..d34aa2b640 100644
--- a/packages/html-reporter/src/index.tsx
+++ b/packages/html-reporter/src/index.tsx
@@ -19,7 +19,7 @@ import type zip from '@zip.js/zip.js';
// @ts-ignore
import * as zipImport from '@zip.js/zip.js/lib/zip-no-worker-inflate.js';
import * as React from 'react';
-import * as ReactDOM from 'react-dom';
+import * as ReactDOM from 'react-dom/client';
import './colors.css';
import type { LoadedReport } from './loadedReport';
import { ReportView } from './reportView';
@@ -44,7 +44,7 @@ const ReportLoader: React.FC = () => {
};
window.onload = () => {
- ReactDOM.render(, document.querySelector('#root'));
+ ReactDOM.createRoot(document.querySelector('#root')!).render();
};
class ZipReport implements LoadedReport {
diff --git a/packages/recorder/src/index.tsx b/packages/recorder/src/index.tsx
index 9d55f8608a..5f1b579948 100644
--- a/packages/recorder/src/index.tsx
+++ b/packages/recorder/src/index.tsx
@@ -17,11 +17,11 @@
import '@web/common.css';
import { applyTheme } from '@web/theme';
import '@web/third_party/vscode/codicon.css';
-import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Main } from './main';
(async () => {
applyTheme();
+ // we'd like to migrate this to React 18, but concurrent mode seems to break some of our tests.
ReactDOM.render(, document.querySelector('#root'));
})();
diff --git a/packages/trace-viewer/src/embedded.tsx b/packages/trace-viewer/src/embedded.tsx
index c916d295c1..4f1503dcf2 100644
--- a/packages/trace-viewer/src/embedded.tsx
+++ b/packages/trace-viewer/src/embedded.tsx
@@ -17,7 +17,7 @@
import '@web/common.css';
import { applyTheme } from '@web/theme';
import '@web/third_party/vscode/codicon.css';
-import * as ReactDOM from 'react-dom';
+import * as ReactDOM from 'react-dom/client';
import { EmbeddedWorkbenchLoader } from './ui/embeddedWorkbenchLoader';
(async () => {
@@ -56,5 +56,5 @@ import { EmbeddedWorkbenchLoader } from './ui/embeddedWorkbenchLoader';
setInterval(function() { fetch('ping'); }, 10000);
}
- ReactDOM.render(, document.querySelector('#root'));
+ ReactDOM.createRoot(document.querySelector('#root')!).render();
})();
diff --git a/packages/trace-viewer/src/index.tsx b/packages/trace-viewer/src/index.tsx
index 993b90a23d..a737d9017f 100644
--- a/packages/trace-viewer/src/index.tsx
+++ b/packages/trace-viewer/src/index.tsx
@@ -17,7 +17,7 @@
import '@web/common.css';
import { applyTheme } from '@web/theme';
import '@web/third_party/vscode/codicon.css';
-import * as ReactDOM from 'react-dom';
+import * as ReactDOM from 'react-dom/client';
import { WorkbenchLoader } from './ui/workbenchLoader';
(async () => {
@@ -38,5 +38,5 @@ import { WorkbenchLoader } from './ui/workbenchLoader';
setInterval(function() { fetch('ping'); }, 10000);
}
- ReactDOM.render(, document.querySelector('#root'));
+ ReactDOM.createRoot(document.querySelector('#root')!).render();
})();
diff --git a/packages/trace-viewer/src/uiMode.tsx b/packages/trace-viewer/src/uiMode.tsx
index f2f846a112..5dac2082e8 100644
--- a/packages/trace-viewer/src/uiMode.tsx
+++ b/packages/trace-viewer/src/uiMode.tsx
@@ -17,7 +17,7 @@
import '@web/common.css';
import { applyTheme } from '@web/theme';
import '@web/third_party/vscode/codicon.css';
-import * as ReactDOM from 'react-dom';
+import * as ReactDOM from 'react-dom/client';
import { UIModeView } from './ui/uiModeView';
(async () => {
@@ -38,5 +38,5 @@ import { UIModeView } from './ui/uiModeView';
setInterval(function() { fetch('ping'); }, 10000);
}
- ReactDOM.render(, document.querySelector('#root'));
+ ReactDOM.createRoot(document.querySelector('#root')!).render();
})();