Skip to content

Is react-dom/client required? #210

Description

@Trisped

When I followed the single-spa-reactquick start instructions, it indicated that I should use import ReactDOMClient from "react-dom/client"; instead of import ReactDOM from "react-dom";. When I make the change, I get a run time error:
application '@new/app' died in status SKIP_BECAUSE_BROKEN: m.createRoot is not a function
TypeError: application '@new/app' died in status SKIP_BECAUSE_BROKEN: m.createRoot is not a function
at exports.createRoot (https://localhost:8080/new-app.js:5404:16)
at u.elementToRender (https://localhost:8080/new-app.js:12748:5162)
at https://localhost:8080/new-app.js:12748:5262
at new Promise ()
at p (https://localhost:8080/new-app.js:12748:4017)
at https://cdn.jsdelivr.net/npm/single-spa@5.9.0/lib/system/single-spa.dev.js:303:33

The URL at the end seems strange, since all my package.json indicates that single-spa 6.0.1 should be used:

{
  "name": "@new-app",
  "version": "0.0.3",
  "license": "UNLICENSED",
  "scripts": {},
  "devDependencies": {
    "@babel/core": "^7.23.3",
    "@babel/eslint-parser": "^7.23.3",
    "@babel/plugin-transform-runtime": "^7.23.3",
    "@babel/preset-env": "^7.23.3",
    "@babel/preset-react": "^7.23.3",
    "@babel/preset-typescript": "^7.23.3",
    "@babel/runtime": "^7.23.3",
    "@testing-library/jest-dom": "^5.17.0",
    "@testing-library/react": "^14.2.2",
    "babel-jest": "^27.5.1",
    "concurrently": "^6.2.1",
    "cross-env": "^7.0.3",
    "eslint": "^7.32.0",
    "eslint-config-prettier": "^8.3.0",
    "eslint-config-ts-react-important-stuff": "^3.0.0",
    "eslint-plugin-prettier": "^3.4.1",
    "husky": "^7.0.2",
    "identity-obj-proxy": "^3.0.0",
    "jest": "^27.5.1",
    "jest-cli": "^27.5.1",
    "prettier": "^2.3.2",
    "pretty-quick": "^3.1.1",
    "ts-config-single-spa": "^3.0.0",
    "typescript": "^4.3.5",
    "webpack": "^5.89.0",
    "webpack-cli": "^4.10.0",
    "webpack-config-single-spa-react": "^4.0.0",
    "webpack-config-single-spa-react-ts": "^4.0.0",
    "webpack-config-single-spa-ts": "^4.1.4",
    "webpack-dev-server": "^4.0.0",
    "webpack-merge": "^5.8.0"
  },
  "dependencies": {
    "@bc/auth-helper": "^0.0.3",
    "@bc/logger": "^0.0.3",
    "@bc/styleguide": "^0.0.3",
    "@types/jest": "^29.5.12",
    "@types/react": "^18.2.73",
    "@types/react-dom": "^18.2.23",
    "@types/systemjs": "^6.1.1",
    "@types/webpack-env": "^1.16.2",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.22.3",
    "single-spa": "^6.0.1",
    "single-spa-react": "^6.0.1"
  },
  "resolutions": {
    "@types/react": "^18.2.73",
    "@types/react-dom": "^18.2.23"
  },
  "types": "dist/new-app.d.ts"
}

The new-app.tsx file which creates the error:

import React from "react";
import ReactDOMClient from "react-dom/client"; 
import singleSpaReact from "single-spa-react";
import Root from "./root.component";

const lifecycles = singleSpaReact({
  React,
  ReactDOMClient,
  rootComponent: Root,
  errorBoundary(err, info, props) {
    // Customize the root error boundary for your microfrontend here.
    return null;
  },
});

export const { bootstrap, mount, unmount } = lifecycles;

The only thing I can think of is that the singleSpaReact method was changed to get the client from ReactDOM...
I thought I should check here just in case.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions