React Version 18 Neuerungen
React gehört zu den javaScript-Frameworks die sich immer größerer Beliebtheit erfreuen. Mit Version 18 wurden viele interesante Neuerungen eingeführt. In diesem Artikel werden wir uns einige der wichtigsten davon einmal genauer ansehen und ihre Funktionsweise durch kurze TypeScript-Beispiele veranschaulichen.
Concurrent Mode
Der Concurrent Mode ist zweifellos eines der am meisten diskutierten Features von React 18. Er ermöglicht es React, mehrere Komponenten gleichzeitig zu rendern, was zu einer besseren Performance führen kann.
Aktivieren des Concurrent Mode:
import React from 'react';
import ReactDOM from 'react-dom';
const App = () => {
return <h1>Willkommen bei React 18!</h1>;
};
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
In diesem einfachen Beispiel wird `ReactDOM.createRoot()` verwendet. Diese Funktion aktiviert automatisch die Nutzung des parallelen Renderings.
**Automatisches Batching** Das automatische Batching ist ein weiteres, für Entwickler sehr interesantes Feature, das dazu beiträgt, die Leistung
von React-Anwendungen weiter zu optimieren. Bereits React 17 konnte eine vereinfachte Form des Batching durchführen. Hier wurden alle Hooks innerhalb
eines Events zusammengefaßt, so dass diese nur ein Render-Ereignis auslößten. In React 18 ist es jetzt auch zusätzlich möglich Hook-Aufrufe und
Zustandsänderungen in Asynchronen Operationen sowie Timeouts zu einem Batch zusammen zu fassen, so dass nur ein einziger Render-Cycle ausgeführt
wird.
import React, { useState } from 'react';
function App() {
const [name, setName] = useState('Max');
const [age, setAge] = useState(25);
// seit react 17 in nur einem Render-Batch
const handleEventUpdate = () => {
setName('Lena');
setAge(28);
};
// ab react 18 in nur einem Render-Batch zusammengefaßt
const handleAsyncUpdate = async () => {
await fetchSomeData(); // Eine asynchrone Funktion
setName('Anna');
setAge(30);
};
// auch ab react 18 in nur einem Render-Batch zusammengefaßt
const handleTimeoutUpdate = () => {
setTimeout(() => {
setName('Lena');
setAge(28);
}, 1000);
};
return (
<div>
<p>Name: {name}</p>
<p>Alter: {age}</p>
<button onClick={handleEventUpdate}>Nach Event aktualisieren</button>
<button onClick={handleTimeoutUpdate}>Nach Timeout aktualisieren</button>
<button onClick={handleAsyncUpdate}>Asynchron aktualisieren</button>
</div>
);
}
Neue APIs: startTransition
Die startTransition
API ist ein weiteres Feature von React 18. Es ermöglicht Entwicklern, Übergänge zwischen verschiedenen Zuständen
darzustellen, ohne dabei die UI zu blockieren. Alerdings sind hierbei einige Punkte zu beachten:
- Es ist ncht möglich zu ermitteln, ob eine
Transtion
in Gange ist. - Die Funktion die an
startTransition
übergeben wird muss synchron sein. - Transitionen werden von regulären StateUpdates unterbrochen !
- Mehrere Transition werden zu einem Batch zusammengefasst.
Beispiel in TypeScript:
import { useState, startTransition } from ‘react’;
function App() {
const [count, setCount] = useState(0);
return (
<div>
<p>{count}</p>
<button onClick={() => {
startTransition(() => {
setCount(count + 1);
});
}}>
Erhöhen
</button>
</div>
);
}
In diesem Beispiel wird startTransition
verwendet, um den Zustandsübergang beim Klicken auf den Button zu steuern.
Serverseitiges Rendering mit Suspense
React 18 führt auch das Streaming von serverseitigem Rendering mit Suspense ein. Dies ermöglicht es den Entwicklern, Inhalte schrittweise zu laden, was auch die Performance und Benutzerfreundlichkeit verbessert.
Beispiel in TypeScript:
import React, { Suspense } from ‘react’;
const Komponente = React.lazy(() => import(‘./Komponente’));
function App() {
return (
<div>
<Suspense fallback={<div>Laden…</div>}>
<Komponente />
</Suspense>
</div>
);
}
In dem Beispiel wird React.lazy()
und Suspense
verwendet, um eine Komponente asynchron zu laden.
Fazit
Mit der Version React 18 kommen neue und interesante Features auf uns Webentwickler zu. Mit den neuen Funktionen und Verbesserungen noch leistungsstärkere und reaktionsfähigere Anwendungen erstellt werden.