diff --git a/package.json b/package.json
index 7fbc17d9de6..4337b87b039 100644
--- a/package.json
+++ b/package.json
@@ -79,10 +79,10 @@
"prop-types": "^15.8.1",
"randexp": "^0.5.3",
"randombytes": "^2.1.0",
- "react": "=17.0.2",
+ "react": "^18.2.0",
"react-copy-to-clipboard": "5.1.0",
"react-debounce-input": "=3.3.0",
- "react-dom": "=17.0.2",
+ "react-dom": "^18.2.0",
"react-immutable-proptypes": "2.2.0",
"react-immutable-pure-component": "^2.2.0",
"react-inspector": "^6.0.1",
@@ -118,7 +118,7 @@
"@jest/globals": "=29.5.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.4",
"@release-it/conventional-changelog": "=5.1.0",
- "@wojtekmaj/enzyme-adapter-react-17": "=0.6.6",
+ "@wojtekmaj/enzyme-adapter-react-18": "=0.7.1",
"autoprefixer": "^10.4.12",
"babel-loader": "^9.1.2",
"babel-plugin-lodash": "=3.3.4",
@@ -169,7 +169,7 @@
"prettier": "^2.8.7",
"process": "^0.11.10",
"react-refresh": "^0.14.0",
- "react-test-renderer": "=17.0.2",
+ "react-test-renderer": "^18.2.0",
"release-it": "=15.4.2",
"rimraf": "^4.3.1",
"sass": "^1.54.0",
diff --git a/src/core/plugins/view/root-injects.jsx b/src/core/plugins/view/root-injects.jsx
index ce931225a66..2aefd24f142 100644
--- a/src/core/plugins/view/root-injects.jsx
+++ b/src/core/plugins/view/root-injects.jsx
@@ -1,5 +1,5 @@
import React, { Component } from "react"
-import ReactDOM from "react-dom"
+import { createRoot } from "react-dom/client"
import { compose } from "redux"
import { connect, Provider } from "react-redux"
import omit from "lodash/omit"
@@ -80,9 +80,19 @@ export const withMappedContainer = (getSystem, getStore, memGetComponent) => (co
return WithMappedContainer
}
+// Store root instances to avoid creating multiple roots on the same DOM node
+const rootInstances = new WeakMap()
+
export const render = (getSystem, getStore, getComponent, getComponents) => (domNode) => {
const App = getComponent(getSystem, getStore, getComponents)("App", "root")
- ReactDOM.render(, domNode)
+
+ // Use React 18's createRoot API
+ let root = rootInstances.get(domNode)
+ if (!root) {
+ root = createRoot(domNode)
+ rootInstances.set(domNode, root)
+ }
+ root.render()
}
export const getComponent = (getSystem, getStore, getComponents) => (componentName, container, config = {}) => {
diff --git a/test/mocha/setup.js b/test/mocha/setup.js
index 06c650e0ba7..2277decd18b 100644
--- a/test/mocha/setup.js
+++ b/test/mocha/setup.js
@@ -1,6 +1,6 @@
const { JSDOM } = require("jsdom")
const Enzyme = require("enzyme")
-const Adapter = require("@wojtekmaj/enzyme-adapter-react-17")
+const Adapter = require("@wojtekmaj/enzyme-adapter-react-18")
const win = require("../../src/core/window")