JavaScript Blog

Frissítés React 18-ra

2022. június 16. - Webdeveloper

A React.JS 18-as verziója új párhuzamos rerendelővel rendelkezik, ami lehetővé teszi számára, hogy számos új fejlesztést kínáljon, mint például a renderelési folyamat megszakításának lehetősége.
Egészen a React 18-ig a renderelési folyamat szinkron volt és nem megszakítható. Ez azt eredményezi, hogy a felhasználói felület zárolódik rendereléskor, így a felhasználó reakciójára (inputjaira) nem biztos, hogy képes időben reagálni.
Az új párhuzamos rerenderelővel ez a folyamat aszinkronná válik , így megszakítható, szüneteltethető, ezáltal a használat gördülékenyebbé válik, az ügyfélélmény nő.
Ezeknek az új funkcióknak az eléréséhez viszont a webfejlesztőnek frissítenie kell a kódjait a legújabb 18-as React.JS-re.

react18.jpg


A React 18-at és a ReactDOM-ot a szokásos npm install vagy yearn add paranccsal frissíthetjük vagy CDN használatával egyszerűen csak kicseréljük a CDN linket.
Amint ezt megtettük, figyelmeztetés jelenik meg a még React 18 előtt írt alkalmazásokban, miszerint a ReacdDOM.render metódus többé nem támogatott a React.JS 18-ban, mivel ez már az új createRoot metódust használja.


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

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

 A React-DOM createRoot metódusának átadjuk az app container div-et , aminek visszatérési értékét rakjuk egy root konstansba, aminek átadhatjuk a komponenst a render metódusán keresztül.

Az unmountComponentAtNode is most már a root egy metódusa lesz, amit root.unmount() paranccsal hívhatunk meg. 

A callback függvény eltávolításra került a render metódusból, így azt a 18-ban már nem lehet használni.
Hogy mit csináljunk helyette? Az alábbi példában megnézheted.

// React17
container = document.getElementById('app');
render(<App tab="home" />, container, () => { console.log('rendered'); }); 
// React18
function AppWithCallbackAfterRender() {
useEffect(() => {
console.log('rendered');
}); return  <App tab="home" />} 
const container = document.getElementById('app');
const root = createRoot(container);
root.render(<AppWithCallbackAfterRender />);

Ha az alkalmazás szerveroldali renderelést használ, akkor a régi kód cseréje az újra így néz ki:


// Before
import { hydrate } from 'react-dom';
const container = document.getElementById('app');
hydrate(, container);

// After
import { hydrateRoot } from 'react-dom/client';
const container = document.getElementById('app');
const root = hydrateRoot(container, );

Köszönöm, ha elolvastad. Ha bármilyen elírást találsz, főleg a kódokban, akkor kérlek jelezd.

A bejegyzés trackback címe:

https://jscript.blog.hu/api/trackback/id/tr6417859991

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása