Ismerje meg a React ReactDOM hatékony DOM renderelési segédeszközeit. Tanuljon a ReactDOM.render, hydrate, unmountComponentAtNode és findDOMNode metódusokról a dinamikus felhasználói felületek építéséhez.
React ReactDOM: Átfogó Útmutató a DOM Renderelési Segédeszközökhöz
A React egy hatékony JavaScript könyvtár felhasználói felületek építésére. Lényegében a React elvonatkoztat a Dokumentum Objektum Modell (DOM) közvetlen manipulációjától, lehetővé téve a fejlesztők számára, hogy a felhasználói felület kívánt állapotának leírására összpontosítsanak. Azonban magának a Reactnek is szüksége van egy módra, hogy kölcsönhatásba lépjen a böngésző DOM-jával, hogy ezeket a UI leírásokat életre keltse. Itt jön képbe a ReactDOM. Ez a csomag specifikus metódusokat biztosít a React komponensek DOM-ba történő renderelésére és az azzal való interakciójuk kezelésére.
A ReactDOM Szerepének Megértése
A ReactDOM hídként működik a React komponens-alapú világa és a böngésző DOM-ja között. Funkcionalitást kínál a React komponensek meghatározott DOM csomópontokba való renderelésére, frissítésére, amikor az adataik megváltoznak, és eltávolítására, amikor már nincs rájuk szükség. Tekintsen rá úgy, mint a motorra, amely a React alkalmazás vizuális megjelenítését hajtja a böngészőben.
Fontos különbséget tenni a React és a ReactDOM között. A React a komponensek létrehozásáért és az állapotkezelésért felelős alapkönyvtár. A ReactDOM felelős azért, hogy ezeket a komponenseket vegye és renderelje a böngésző DOM-jába. Míg a React más környezetekben is használható (mint például a React Native a mobilfejlesztéshez, amely egy másik renderelő könyvtárat használ), a ReactDOM kifejezetten webalkalmazásokhoz lett tervezve.
A ReactDOM Kulcsfontosságú Metódusai
Nézzük meg a ReactDOM csomag által biztosított legfontosabb metódusokat:
ReactDOM.render()
A ReactDOM.render()
metódus minden React alkalmazás alapja. Felelős egy React komponens (vagy komponensfa) csatolásáért egy megadott DOM csomóponthoz. Ez a csomópont általában egy üres HTML elem az oldalon belül.
Szintaxis:
ReactDOM.render(element, container[, callback])
element
: A renderelni kívánt React elem. Ez általában az alkalmazás legfelső szintű komponense.container
: Az a DOM elem, ahová a komponenst csatolni szeretné. Ennek egy érvényes DOM csomópontnak kell lennie a HTML-ben.callback
(opcionális): Egy függvény, amely a komponens renderelése után kerül végrehajtásra.
Példa:
Tegyük fel, hogy van egy egyszerű React komponensünk, amit App
-nak hívnak:
import React from 'react';
import ReactDOM from 'react-dom/client';
function App() {
return (
<div>
<h1>Szia, React!</h1>
<p>Ez egy egyszerű React komponens.</p>
</div>
);
}
És egy HTML fájl egy "root" azonosítójú elemmel:
<div id="root"></div>
Az App
komponens "root" elembe való rendereléséhez a következőt kell használni:
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Fontos megjegyzés (React 18 és újabb verziók): A React 18-as és újabb verzióiban a ReactDOM.render
elavultnak számít. Az ajánlott megközelítés a ReactDOM.createRoot
használata, ahogy a fenti példa is mutatja. Ez teszi lehetővé a React 18-ban bevezetett új, párhuzamos funkciókat.
Frissítések megértése: A ReactDOM.render()
felelős a DOM frissítéséért is, amikor a komponens adatai megváltoznak. A React egy virtuális DOM-ot használ, hogy hatékonyan összehasonlítsa a jelenlegi állapotot a kívánt állapottal, és csak a valódi DOM szükséges részeit frissítse, minimalizálva ezzel a teljesítményterhelést.
ReactDOM.hydrate()
A ReactDOM.hydrate()
metódust akkor használjuk, amikor egy olyan React alkalmazást renderelünk, amelyet már a szerveren rendereltek. Ez egy kulcsfontosságú technika az alkalmazás kezdeti betöltési teljesítményének javítására és a SEO fokozására.
Szerveroldali renderelés (SSR): Az SSR során a React komponenseket HTML-be renderelik a szerveren. Ezt a HTML-t ezután elküldik a böngészőnek, amely azonnal meg tudja jeleníteni a kezdeti tartalmat. Azonban a böngészőnek még "hidratálnia" kell az alkalmazást – azaz eseményfigyelőket kell csatolnia és interaktívvá kell tennie az alkalmazást. A ReactDOM.hydrate()
veszi a szerver által renderelt HTML-t, és csatolja hozzá a React eseménykezelőit, ezzel teljesen működőképessé téve az alkalmazást.
Szintaxis:
ReactDOM.hydrate(element, container[, callback])
A paraméterek megegyeznek a ReactDOM.render()
metóduséval.
Példa:
A szerveren a React alkalmazást egy stringgé renderelné:
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './App';
const html = ReactDOMServer.renderToString(<App />);
Ez a HTML ezután elküldésre kerül a kliensnek.
A kliensoldalon a ReactDOM.hydrate()
metódust használná a React eseménykezelők csatolására:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.hydrate(<App />);
A hidratálás előnyei:
- Jobb kezdeti betöltési idő: A felhasználók azonnal látják a tartalmat, még mielőtt a JavaScript kód teljesen betöltődne.
- Jobb SEO: A keresőmotorok képesek bejárni és indexelni a teljesen renderelt HTML-t.
ReactDOM.unmountComponentAtNode()
A ReactDOM.unmountComponentAtNode()
egy csatolt komponenst távolít el a DOM-ból. Ez hasznos lehet, amikor dinamikusan kell eltávolítania a felhasználói felület részeit, vagy amikor erőforrásokat takarít fel, mielőtt elnavigálna egy oldalról.
Szintaxis:
ReactDOM.unmountComponentAtNode(container)
container
: Az a DOM elem, ahová a komponens csatolva van.
Példa:
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 />);
// Később, a komponens lecsatolásához:
root.unmount();
A ReactDOM.unmountComponentAtNode(rootElement)
meghívása után az App
komponens eltávolításra kerül a DOM-ból, és minden hozzá kapcsolódó eseményfigyelő és erőforrás felszabadul.
Mikor használjuk:
- Modális ablak vagy párbeszédpanel eltávolítása a felhasználói felületről.
- Komponens erőforrásainak felszabadítása, mielőtt egy másik oldalra navigálnánk.
- Dinamikus váltás különböző komponensek között.
ReactDOM.findDOMNode() (Elavult)
Fontos: A ReactDOM.findDOMNode()
elavultnak számít, és használata nem ajánlott a modern React alkalmazásokban. Korábban egy csatolt komponens mögöttes DOM csomópontjának elérésére használták. Használata azonban ellenjavallt, mert megtöri a React absztrakcióját, és kiszámíthatatlan viselkedéshez vezethet, különösen a funkcionális komponensek és a hookok bevezetésével.
Alternatív megközelítések:
A ReactDOM.findDOMNode()
használata helyett fontolja meg ezeket az alternatív megközelítéseket:
- Ref-ek: Használjon React ref-eket a DOM csomópontok közvetlen eléréséhez. Ez az ajánlott megközelítés a DOM elemekkel való interakcióra.
- Kontrollált komponensek: Tegye a komponenseit "kontrollálttá" azáltal, hogy állapotukat a React segítségével kezeli. Ez lehetővé teszi a felhasználói felület manipulálását a DOM közvetlen elérése nélkül.
- Eseménykezelők: Csatoljon eseménykezelőket a komponensekhez, és használja az esemény objektumot a cél DOM elem eléréséhez.
Párhuzamosság a React 18-ban és a ReactDOM-ban
A React 18 bevezeti a párhuzamosságot (concurrency), egy új mechanizmust, amely lehetővé teszi a React számára, hogy megszakítsa, szüneteltesse, folytassa vagy elhagyja a renderelési feladatokat. Ez olyan hatékony funkciókat tesz elérhetővé, mint az átmenetek és a szelektív hidratálás, ami simább és reszponzívabb felhasználói élményt eredményez.
Hatása a ReactDOM-ra: A ReactDOM.createRoot
bevezetése kulcsfontosságú a párhuzamosság előnyeinek kihasználásához. Ez a metódus létrehoz egy gyökeret, amelyből az alkalmazás renderelődik, lehetővé téve a React számára a renderelési feladatok hatékonyabb kezelését.
Átmenetek (Transitions): Az átmenetek lehetővé teszik, hogy bizonyos állapotfrissítéseket nem sürgősként jelöljön meg, így a React prioritást adhat a fontosabb frissítéseknek és fenntarthatja a reszponzivitást. Például útvonalak közötti navigáláskor az útvonalváltást nem sürgős frissítésként jelölheti meg, biztosítva, hogy a felhasználói felület reszponzív maradjon még az adatlekérés során is.
Szelektív hidratálás: A szelektív hidratálással a React igény szerint hidratálhatja az egyes komponenseket, ahelyett, hogy az egész alkalmazást egyszerre hidratálná. Ez jelentősen javítja a nagy alkalmazások kezdeti betöltési idejét.
Globális szempontok a React ReactDOM használatakor
Amikor React alkalmazásokat fejlesztünk globális közönség számára, fontos figyelembe venni olyan tényezőket, mint a nemzetköziesítés (i18n) és a honosítás (l10n). A ReactDOM maga nem kezeli közvetlenül ezeket a szempontokat, de kulcsfontosságú, hogy integráljuk i18n könyvtárakkal és bevált gyakorlatokkal.
- Nemzetköziesítés (i18n): Az alkalmazások olyan tervezésének és fejlesztésének folyamata, amely lehetővé teszi azok adaptálását különböző nyelvekhez és régiókhoz anélkül, hogy mérnöki változtatásokra lenne szükség.
- Honosítás (l10n): Egy nemzetköziesített alkalmazás adaptálásának folyamata egy adott nyelvhez vagy régióhoz a szövegek lefordításával, a formázás módosításával és a kulturális különbségek kezelésével.
i18n könyvtárak használata:
Az olyan könyvtárak, mint a react-i18next
és a globalize
, eszközöket biztosítanak a fordítások, a dátum- és időformázás, valamint egyéb honosítással kapcsolatos feladatok kezelésére. Ezek a könyvtárak általában zökkenőmentesen integrálódnak a React-tel és a ReactDOM-mal.
Példa a react-i18next-tel:
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>
);
}
Ebben a példában a useTranslation
hook hozzáférést biztosít a t
fordítófüggvényhez, amely a megadott kulcshoz tartozó megfelelő fordítást kéri le. Maguk a fordítások általában külön fájlokban vannak tárolva minden nyelvhez.
Jobbról balra (RTL) elrendezés:
Néhány nyelvet, mint például az arabot és a hébert, jobbról balra írják. Amikor ezekre a nyelvekre fejlesztünk alkalmazásokat, biztosítani kell, hogy a felhasználói felület támogassa az RTL elrendezést. Ez általában a szöveg irányának módosítását, a komponensek elrendezésének tükrözését és a kétirányú szöveg kezelését foglalja magában.
Bevált gyakorlatok a ReactDOM használatához
A hatékony és karbantartható React alkalmazások biztosítása érdekében kövesse az alábbi bevált gyakorlatokat a ReactDOM használatakor:
- Használja a
ReactDOM.createRoot
metódust a React 18-as és újabb verzióiban: Ez az ajánlott módja az alkalmazás renderelésének és a párhuzamosság előnyeinek kihasználásának. - Kerülje a közvetlen DOM manipulációt: Hagyja, hogy a React kezelje a DOM-ot. A közvetlen DOM manipuláció következetlenségekhez és teljesítményproblémákhoz vezethet.
- Mérsékelten használjon ref-eket: Csak akkor használjon ref-eket, ha közvetlenül el kell érnie a DOM csomópontokat speciális célokra, például egy beviteli mező fókuszálására.
- Optimalizálja a renderelési teljesítményt: Használjon olyan technikákat, mint a memoizáció és a shouldComponentUpdate a felesleges újrarenderelések megelőzésére.
- Fontolja meg a szerveroldali renderelést a jobb teljesítmény és SEO érdekében.
- Használjon i18n könyvtárakat a nemzetköziesítéshez és a honosításhoz.
- Tesztelje alaposan az alkalmazását különböző böngészőkben és eszközökön.
Összegzés
A ReactDOM a React ökoszisztéma elengedhetetlen része, amely hidat képez a React komponensek és a böngésző DOM-ja között. A kulcsfontosságú metódusok, mint a ReactDOM.render()
, ReactDOM.hydrate()
és ReactDOM.unmountComponentAtNode()
megértésével, valamint a bevált gyakorlatok alkalmazásával teljesítőképes, karbantartható és globálisan elérhető React alkalmazásokat építhet. A párhuzamosság bevezetésével a React 18-ban a ReactDOM.createRoot
használata kulcsfontosságú a teljesítmény és reszponzivitás új szintjeinek eléréséhez. Ne feledje figyelembe venni a nemzetköziesítési és honosítási bevált gyakorlatokat, amikor globális közönség számára fejleszt, hogy valóban befogadó és hozzáférhető felhasználói élményt teremtsen.