Utforska React ReactDOMs kraftfulla DOM-renderingsverktyg. LÀr dig om ReactDOM.render, hydrate, unmountComponentAtNode och findDOMNode för att bygga dynamiska anvÀndargrÀnssnitt.
React ReactDOM: En omfattande guide till DOM-renderingsverktyg
React Àr ett kraftfullt JavaScript-bibliotek för att bygga anvÀndargrÀnssnitt. I grunden abstraherar React bort den direkta manipuleringen av Document Object Model (DOM), vilket gör att utvecklare kan fokusera pÄ att beskriva det önskade tillstÄndet för sitt grÀnssnitt. React behöver dock ett sÀtt att interagera med webblÀsarens DOM för att ge liv Ät dessa grÀnssnittsbeskrivningar. Det Àr dÀr ReactDOM kommer in i bilden. Detta paket tillhandahÄller specifika metoder för att rendera React-komponenter i DOM och hantera deras interaktion med den.
FörstÄ ReactDOMs roll
ReactDOM fungerar som bron mellan Reacts komponentbaserade vÀrld och webblÀsarens DOM. Det erbjuder funktionalitet för att rendera React-komponenter i specifika DOM-noder, uppdatera dem nÀr deras data Àndras och till och med ta bort dem nÀr de inte lÀngre behövs. Se det som motorn som driver den visuella representationen av din React-applikation i webblÀsaren.
Det Àr viktigt att skilja mellan React och ReactDOM. React Àr kÀrnbiblioteket för att skapa komponenter och hantera tillstÄnd. ReactDOM ansvarar för att ta dessa komponenter och rendera dem i webblÀsarens DOM. Medan React kan anvÀndas i andra miljöer (som React Native för mobilutveckling, som anvÀnder ett annat renderingsbibliotek), Àr ReactDOM specifikt utformat för webbapplikationer.
Centrala metoder i ReactDOM
LÄt oss utforska nÄgra av de mest avgörande metoderna som tillhandahÄlls av ReactDOM-paketet:
ReactDOM.render()
Metoden ReactDOM.render()
Àr grunden i varje React-applikation. Den ansvarar för att montera en React-komponent (eller ett trÀd av komponenter) i en specificerad DOM-nod. Denna nod Àr vanligtvis ett tomt HTML-element pÄ din sida.
Syntax:
ReactDOM.render(element, container[, callback])
element
: Det React-element du vill rendera. Detta Àr vanligtvis toppnivÄkomponenten i din applikation.container
: Det DOM-element dÀr du vill montera komponenten. Detta bör vara en giltig DOM-nod i din HTML.callback
(frivillig): En funktion som kommer att exekveras efter att komponenten har renderats.
Exempel:
LÄt oss sÀga att du har en enkel React-komponent som heter App
:
import React from 'react';
import ReactDOM from 'react-dom/client';
function App() {
return (
<div>
<h1>Hej, React!</h1>
<p>Detta Àr en enkel React-komponent.</p>
</div>
);
}
Och en HTML-fil med ett element med ID "root":
<div id="root"></div>
För att rendera App
-komponenten i "root"-elementet skulle du anvÀnda:
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Viktig notering (React 18 och senare): I React 18 och senare anses ReactDOM.render
vara förÄldrad. Den rekommenderade metoden Àr att anvÀnda ReactDOM.createRoot
som visas ovan. Detta aktiverar de nya samtidiga funktionerna som introducerades i React 18.
FörstÄ uppdateringar: ReactDOM.render()
ansvarar ocksÄ för att uppdatera DOM nÀr komponentens data Àndras. React anvÀnder en virtuell DOM för att effektivt jÀmföra det nuvarande tillstÄndet med det önskade tillstÄndet och uppdaterar endast de nödvÀndiga delarna av den verkliga DOM, vilket minimerar prestandabelastningen.
ReactDOM.hydrate()
ReactDOM.hydrate()
anvÀnds nÀr du renderar en React-applikation som redan har renderats pÄ servern. Detta Àr en nyckelteknik för att förbÀttra den initiala laddningsprestandan för din applikation och förbÀttra SEO.
Server-Side Rendering (SSR): Vid SSR renderas React-komponenterna till HTML pĂ„ servern. Denna HTML skickas sedan till webblĂ€saren, som kan visa det initiala innehĂ„llet omedelbart. WebblĂ€saren behöver dock fortfarande "hydrera" applikationen â det vill sĂ€ga bifoga hĂ€ndelsehanterare och göra applikationen interaktiv. ReactDOM.hydrate()
tar den serverrenderade HTML-koden och bifogar Reacts hÀndelsehanterare till den, vilket gör applikationen fullt fungerande.
Syntax:
ReactDOM.hydrate(element, container[, callback])
Parametrarna Àr desamma som för ReactDOM.render()
.
Exempel:
PÄ servern skulle du rendera din React-applikation till en strÀng:
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './App';
const html = ReactDOMServer.renderToString(<App />);
Denna HTML skulle sedan skickas till klienten.
PÄ klientsidan skulle du anvÀnda ReactDOM.hydrate()
för att bifoga Reacts hÀndelsehanterare:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.hydrate(<App />);
Fördelar med hydrering:
- FörbÀttrad initial laddningstid: AnvÀndare ser innehÄllet omedelbart, Àven innan JavaScript-koden Àr fullstÀndigt laddad.
- FörbÀttrad SEO: Sökmotorer kan genomsöka och indexera den fullstÀndigt renderade HTML-koden.
ReactDOM.unmountComponentAtNode()
ReactDOM.unmountComponentAtNode()
anvÀnds för att ta bort en monterad komponent frÄn DOM. Detta kan vara anvÀndbart nÀr du dynamiskt behöver ta bort delar av ditt grÀnssnitt eller nÀr du stÀdar upp resurser innan du navigerar bort frÄn en sida.
Syntax:
ReactDOM.unmountComponentAtNode(container)
container
: Det DOM-element dÀr komponenten Àr monterad.
Exempel:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const rootElement = document.getElementById('root');
const root = ReactDOM.createRoot(rootElement);
root.render(<App />);
// Senare, för att avmontera komponenten:
root.unmount();
Efter att ha anropat ReactDOM.unmountComponentAtNode(rootElement)
kommer App
-komponenten att tas bort frÄn DOM, och alla hÀndelsehanterare och resurser som Àr associerade med den kommer att stÀdas upp.
NÀr ska man anvÀnda det:
- Ta bort en modal eller dialogruta frÄn grÀnssnittet.
- StÀda upp en komponent innan navigering till en annan sida.
- Dynamiskt vÀxla mellan olika komponenter.
ReactDOM.findDOMNode() (FörÄldrad)
Viktigt: ReactDOM.findDOMNode()
anses vara förÄldrad och rekommenderas inte för anvÀndning i moderna React-applikationer. Den anvÀndes tidigare för att komma Ät den underliggande DOM-noden för en monterad komponent. AnvÀndningen av den avrÄds dock eftersom den bryter Reacts abstraktion och kan leda till oförutsÀgbart beteende, sÀrskilt med införandet av funktionella komponenter och hooks.
Alternativa tillvÀgagÄngssÀtt:
IstÀllet för att anvÀnda ReactDOM.findDOMNode()
, övervÀg dessa alternativa metoder:
- Refs: AnvÀnd React-refs för att direkt komma Ät DOM-noder. Detta Àr den rekommenderade metoden för att interagera med DOM-element.
- Kontrollerade komponenter: Gör dina komponenter "kontrollerade" genom att hantera deras tillstÄnd med React. Detta gör att du kan manipulera grÀnssnittet utan att direkt komma Ät DOM.
- HÀndelsehanterare: Bifoga hÀndelsehanterare till dina komponenter och anvÀnd hÀndelseobjektet för att komma Ät mÄlets DOM-element.
Samtidighet (Concurrency) i React 18 och ReactDOM
React 18 introducerar samtidighet (concurrency), en ny mekanism som lÄter React avbryta, pausa, Äteruppta eller överge renderingsuppgifter. Detta möjliggör kraftfulla funktioner som övergÄngar och selektiv hydrering, vilket leder till en smidigare och mer responsiv anvÀndarupplevelse.
PÄverkan pÄ ReactDOM: AnvÀndningen av ReactDOM.createRoot
Àr avgörande för att kunna dra nytta av fördelarna med samtidighet. Denna metod skapar en rot frÄn vilken din applikation renderas, vilket gör att React kan hantera renderingsuppgifter mer effektivt.
ĂvergĂ„ngar (Transitions): ĂvergĂ„ngar lĂ„ter dig markera vissa tillstĂ„ndsuppdateringar som icke-brĂ„dskande, vilket gör att React kan prioritera viktigare uppdateringar och bibehĂ„lla responsivitet. Till exempel, nĂ€r du navigerar mellan rutter, kan du markera ruttövergĂ„ngen som en icke-brĂ„dskande uppdatering, vilket sĂ€kerstĂ€ller att grĂ€nssnittet förblir responsivt Ă€ven under datahĂ€mtning.
Selektiv hydrering: Med selektiv hydrering kan React hydrera enskilda komponenter vid behov, istÀllet för att hydrera hela applikationen pÄ en gÄng. Detta förbÀttrar avsevÀrt den initiala laddningstiden för stora applikationer.
Globala övervÀganden för React ReactDOM
NÀr man utvecklar React-applikationer för en global publik Àr det viktigt att ta hÀnsyn till faktorer som internationalisering (i18n) och lokalisering (l10n). ReactDOM hanterar inte direkt dessa aspekter, men det Àr avgörande att integrera det med i18n-bibliotek och bÀsta praxis.
- Internationalisering (i18n): Processen att utforma och utveckla applikationer som kan anpassas till olika sprÄk och regioner utan att krÀva tekniska Àndringar.
- Lokalisering (l10n): Processen att anpassa en internationaliserad applikation för ett specifikt sprÄk eller en specifik region genom att översÀtta text, justera formatering och hantera kulturella skillnader.
AnvÀnda i18n-bibliotek:
Bibliotek som react-i18next
och globalize
tillhandahÄller verktyg för att hantera översÀttningar, formatering av datum och tid och andra lokaliseringsrelaterade uppgifter. Dessa bibliotek integreras vanligtvis sömlöst med React och ReactDOM.
Exempel med react-i18next:
import React from 'react';
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { t } = useTranslation();
return (
<div>
<h1>{t('greeting')}</h1>
<p>{t('description')}</p>
</div>
);
}
I detta exempel ger useTranslation
-hooken tillgÄng till översÀttningsfunktionen t
, som hĂ€mtar rĂ€tt översĂ€ttning för den angivna nyckeln. ĂversĂ€ttningarna lagras vanligtvis i separata filer för varje sprĂ„k.
Höger-till-vÀnster (RTL) layout:
Vissa sprÄk, som arabiska och hebreiska, skrivs frÄn höger till vÀnster. NÀr man utvecklar applikationer för dessa sprÄk mÄste man se till att grÀnssnittet stöder RTL-layout. Detta innebÀr vanligtvis att justera textriktningen, spegla komponenternas layout och hantera dubbelriktad text.
BÀsta praxis för att anvÀnda ReactDOM
För att sÀkerstÀlla effektiva och underhÄllbara React-applikationer, följ dessa bÀsta praxis nÀr du anvÀnder ReactDOM:
- AnvÀnd
ReactDOM.createRoot
i React 18 och senare: Detta Àr det rekommenderade sÀttet att rendera din applikation och dra nytta av fördelarna med samtidighet. - Undvik direkt DOM-manipulering: LÄt React hantera DOM. Direkt DOM-manipulering kan leda till inkonsekvenser och prestandaproblem.
- AnvÀnd refs sparsamt: AnvÀnd endast refs nÀr du behöver direkt Ätkomst till DOM-noder för specifika ÀndamÄl, som att fokusera pÄ ett inmatningsfÀlt.
- Optimera renderingsprestanda: AnvÀnd tekniker som memorering och shouldComponentUpdate för att förhindra onödiga omrenderingar.
- ĂvervĂ€g server-side rendering för förbĂ€ttrad prestanda och SEO.
- AnvÀnd i18n-bibliotek för internationalisering och lokalisering.
- Testa din applikation noggrant i olika webblÀsare och pÄ olika enheter.
Slutsats
ReactDOM Àr en vÀsentlig del av React-ekosystemet och utgör bron mellan React-komponenter och webblÀsarens DOM. Genom att förstÄ nyckelmetoder som ReactDOM.render()
, ReactDOM.hydrate()
och ReactDOM.unmountComponentAtNode()
och anamma bÀsta praxis kan du bygga prestandastarka, underhÄllbara och globalt tillgÀngliga React-applikationer. Med införandet av samtidighet i React 18 Àr det avgörande att anvÀnda ReactDOM.createRoot
för att lÄsa upp nya nivÄer av prestanda och responsivitet. Kom ihÄg att beakta bÀsta praxis för internationalisering och lokalisering nÀr du bygger för en global publik för att skapa verkligt inkluderande och tillgÀngliga anvÀndarupplevelser.