javascript - Notificare de deprecitare: ReactDOM.render nu mai este acceptat în React 18
Primeasc această eroare de fiecare dată când creez o nouă aplicație React:
Avertisment: ReactDOM.render nu mai este acceptat în React 18. Folosește createRoot în schimb. Până când treci la noul API, aplicația ta se va comporta ca și cum ar rula React 17. Află mai multe: https://reactjs.org/link/switch-to-createroot
Cum pot să-l repar?
Am creat aplicația mea React folosind:
npx create-react-app my-app
Răspuns #1
În fișierul tău index.js, schimbă în:
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
reportWebVitals();
Pentru TypeScript
Credit din secțiunea de comentarii de mai jos a răspunsului: Kibonge Murphy
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
reportWebVitals();
Răspunsul #2
React 18 a fost lansat pe 29 martie 2022. ReactDOM.render a fost depreciat în React 18 și în prezent generează un avertisment și rulează într-un mod compatibil.
Deprecări
Deprecări
react-dom:ReactDOM.rendera fost învechit. Utilizarea acestuia va genera un avertisment și va rula aplicația ta în modul React 17. :react-dom:ReactDOM.hydratea fost învechit. Utilizarea acestuia va afișa un avertisment și va rula aplicația ta în modul React 17.react-dom:ReactDOM.unmountComponentAtNodea fost învechit.react-dom:ReactDOM.renderSubtreeIntoContainera fost învechit.react-dom/server:ReactDOMServer.renderToNodeStreama fost depreciat.
Pentru a rezolva problema, poți fie să revii la o versiune anterioară de React, fie să îți actualizezi fișierul index.js pentru a fi compatibil cu sintaxa React 18.
Exemplu :
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>
);
Răspunsul #3
În loc de:
import ReactDOM from 'react-dom'
ReactDom.render(<h1>Your App</h1>, document.getElementById('root'))
Folosește :
import { createRoot } from 'react-dom/client'
createRoot(document.getElementById('root')).render(<h1>Your App</h1>)
Mai multe detalii aici
Răspuns #4
Înainte
import { render } from 'react-dom';
const container = document.getElementById('app');
render(<App tab="home" />, container);
După
import { createRoot } from 'react-dom/client';
const container = document.getElementById('app');
const root = createRoot(container);
root.render(<App tab="home" />);
Înainte, în fișierul tău index.js:
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();
Schimbă-l ca mai jos în fișierul tău index.js:
import React from 'react';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { createRoot } from 'react-dom/client';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(<React.StrictMode>
<App />
</React.StrictMode>);
reportWebVitals();
Răspunsul #5
API-ul rădăcină vechi cu ReactDOM.render a fost depreciat în React 18 și a fost înlocuit cu un API nou de rădăcină folosind createRoot. Rădăcina aplicației tale este elementul DOM de nivel superior care conține toate componentele tale renderizate și este de obicei un <div> cu un ID de root.
React 18 încă are suport pentru ReactDOM.render, așa că tehnic nu ești obligat să faci actualizarea, dar nu poți fi sigur cât va dura acest suport.
Poți găsi mult mai multe informații despre diferența dintre ReactDOM.render și createRoot la https://thelonecoder.dev/javascript/react-js/reactdom-render-vs-createroot/.
Pentru a actualiza la noul API root, modificați fișierul index.js la ceva asemănător cu următorul:
import { createRoot } from 'react-dom/client';
import App from './App';
const root = createRoot(document.getElementById('root'));
root.render(<App />);
