Veraltungshinweis: ReactDOM.render wird in React 18 nicht mehr unterstützt

Lesezeit: 3 Minuten

Benutzer-Avatar
Lungu Mihai Adrian

Ich erhalte diesen Fehler jedes Mal, wenn ich eine neue React-App erstelle:

Warnung: ReactDOM.render wird in React 18 nicht mehr unterstützt. Verwenden Sie stattdessen createRoot. Bis Sie zur neuen API wechseln, verhält sich Ihre App so, als würde sie React 17 ausführen. Weitere Informationen: https://reactjs.org/link/switch-to-createroot

Wie kann ich es reparieren?

Ich habe meine React-App erstellt mit:

npx create-react-app my-app

Benutzer-Avatar
Zeichnete Reese

React 18 wurde am 29. März 2022 ausgeliefert. ReactDOM.render ist in React 18 veraltet und gibt derzeit eine Warnung aus und läuft in einem kompatiblen Modus.

Abwertungen

Abwertungen

  • react-dom: ReactDOM.render ist veraltet. Wenn Sie es verwenden, wird Ihre App gewarnt und im React 17-Modus ausgeführt.
  • react-dom: ReactDOM.hydrate ist veraltet. Wenn Sie es verwenden, wird Ihre App gewarnt und im React 17-Modus ausgeführt.
  • react-dom: ReactDOM.unmountComponentAtNode ist veraltet.
  • react-dom: ReactDOM.renderSubtreeIntoContainer ist veraltet.
  • react-dom/server: ReactDOMServer.renderToNodeStream ist veraltet.

Um dies zu beheben, können Sie entweder zu einer früheren Version von React zurückkehren oder Ihre index.js-Datei aktualisieren, um sie an die React 18-Syntax anzupassen.

Beispiel:

import { StrictMode } from "react";
import { createRoot } from "react-dom/client";

import App from "./App";

const rootElement = document.getElementById("root");
const root = createRoot(rootElement);

root.render(
  <StrictMode>
    <App />
  </StrictMode>
);

  • Dies ist eine gute Antwort. Aber wenn Sie wie ich Typescript verwenden, müssen Sie so etwas wie “` if (!rootElement) throw new Error(‘Failed to find the root element’) “` hinzufügen, bevor Sie createRoot aufrufen.

    – Kevin Rutherford

    1. April um 15:08 Uhr

  • Typoskript-Benutzer müssen lediglich “devDependencies”: { “@types/react-dom”: “^18.0.0” } hinzufügen. Das ist es. Der obige Code mit createRoot ist in Ordnung.

    – Jo

    8. April um 19:35 Uhr

  • Es ist nicht einfach, den Unterschied zu sehen. Und eine Erklärung wäre angebracht. ZB, was ist die Idee/der Kern? Aus dem Hilfecenter: “…erklären Sie immer, warum die von Ihnen vorgestellte Lösung angemessen ist und wie sie funktioniert”. Bitte antworten Sie, indem Sie Ihre Antwort bearbeiten (ändern), nicht hier in den Kommentaren (ohne “Bearbeiten:”, “Aktualisieren:” oder ähnliches – die Antwort sollte so aussehen, als wäre sie heute geschrieben).

    – Peter Mortensen

    15. April um 11:52 Uhr

Benutzer-Avatar
heetboda10

Wie Sie sagten, haben Sie Ihre React-App erstellt mit: npx create-react-app meine-app.

  • Ihre index.js muss nach der Ausführung des Befehls so aussehen.
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

reportWebVitals();
  • Ihr Code nach den in der Konsole erwähnten Änderungen
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const container = document.getElementById('root');
const root = ReactDOM.createRoot(container);
root.render(<App />);

reportWebVitals();

Benutzer-Avatar
Peter Mortensen

Wenn Ihre Anwendung React-Router verwendet, funktioniert der folgende Code einwandfrei:

import { createRoot } from "react-dom/client";
const container = document.getElementById("root");
const root = createRoot(container);
root.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);

Es funktioniert perfekt (mit React-Router).

Benutzer-Avatar
Peter Mortensen

Wie Ihr Fehler besagt, wird ReactDOM.render nicht mehr unterstützt. Verwenden Sie also die neue createRoot.

Wie Sie dem folgenden Code entnehmen können (der aus die Dokumentation) müssen Sie lediglich ReactDOM.render durch createRoot ersetzen.

// Before
import { render } from 'react-dom';
const container = document.getElementById('app');
render(<App tab="home" />, container);

// After
import { createRoot } from 'react-dom/client';
const container = document.getElementById('app');
const root = createRoot(container);
root.render(<App tab="home" />);

1009920cookie-checkVeraltungshinweis: ReactDOM.render wird in React 18 nicht mehr unterstützt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy