Veraltungshinweis: ReactDOM.render wird in React 18 nicht mehr unterstützt
Lesezeit: 3 Minuten
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
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.
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
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();
Peter Mortensen
Wenn Ihre Anwendung React-Router verwendet, funktioniert der folgende Code einwandfrei: