
React-Code. (Foto: Shutterstock/Thongchai Kitiyanantawong)
Der erste Release-Candidate von React 17 ist da. Zweieinhalb Jahre nach Veröffentlichung des letzten Major Updates gibt es jetzt einen Nachfolger, der allerdings eine Besonderheit mit sich bringt: Neue dev-facing-Features enthält Version 17 nicht. Stattdessen liegt der Fokus bei Version 17 darauf, Upgrades zu vereinfachen.
Neue React-Features seien zwar in Arbeit, man habe sich jedoch dagegen entschieden, diese mit React 17 auszurollen, so der Blogpost zum Release. Version 17 sei stattdessen als Meilenstein in der React-Release-Historie zu verstehen, der es künftig einfacher machen will, verschiedene Versionen von React parallel in einem Projekt zu nutzen. Bisherige React-Upgrades waren eine Sache von „alles oder nichts“. Entweder ihr seid bei der alten Version geblieben oder habt eure ganze App auf den jeweils neuen Release migriert. Ein dazwischen gab es nicht. Diese Herangehensweise hat solange gut funktioniert, bis sie es nicht mehr tat: Einige API-Änderungen, zum Beispiel die Legacy-Context-API zu deprecaten, lassen sich nicht einfach so automatisieren. Moderne Apps verwenden diese Apps im Normalfall nicht mehr, von React werden die API aber immer noch unterstützt. Das stellte das React-Core-Team vor die Wahl, diese API entweder weiterhin zu unterstützen oder allen Apps, die die API noch verwendeten, zukünftige Upgrades zu verwehren.
Die Neuerung: Graduelle Upgrades
React 17 ermöglicht jetzt erstmals graduelle Upgrades. Eine Migration von Version zu Version bedeutete bis zu Version 17, die komplette App auf einmal zu upgraden. In den meisten Fällen stellt das auch kein Problem dar. Für Codebases, die schon ein paar Jahre alt sind und nicht aktiv gepflegt werden, gestaltet sich das schon schwieriger. Es war zwar auch bisher möglich, zwei Versionen von React parallel zu verwenden, diese Architektur ist allerdings fragil und verursacht Probleme mit Events. React 17 schafft die Vorraussetzungen dafür, dass ihr diese Probleme bei zukünftigen Major Upgrades nicht mehr haben werdet. Wenn ihr dann von Version 17 auf Version 18 aktualisiert, habt ihr neben dem Default – alles auf einmal zu aktualisieren – zumindest die Option, Teile eurer Anwendung auf einer älteren Version zu belassen. So habt ihr künftig die Möglichkeit, auch Apps mit von der aktuellen Version nicht mehr unterstützten Abhängigkeiten zu upgraden.
Neuerungen gibt es erst wieder in Version 18
Die Einführung weiterer neuer Features hat das Core-Team auf kommende Releases verschoben. Trotzdem ist Version 17 ein Major Release. Der Grund: Um diese stückweisen Upgrades zu ermöglichen, waren einige potentiell nicht abwärtskompatible Änderungen an Reacts Eventsystem notwendig. Für die meisten Apps dürfte sich das Upgrade jedoch weitestgehend problemlos gestalten. Wer dabei auf Probleme stößt, kann ein entsprechendes Issue eröffnen.
Damit ihr euch das Ganze in Aktion anschauen könnt, gibt es zudem ein Demo-Repository, das aufzeigt, wie ihr eine ältere Version von React lazy-loaden könnt.
Einige weitere kleinere Breaking Changes gibt es allerdings doch. So bringt Version 17 Verbesserungen der Browserkompatibilität sowie an Reacts Error-Handling mit, außerdem wurden sogenannte Private Dependencies entfernt. Wer sich für diese und für die Änderungen an Reacts Event-Delegation-Mechanismus im Detail interessiert, sei an den offiziellen Blogpost zum Release verwiesen.
Installieren könnt ihr den Release-Candidate via npm:
npm install react@17.0.0-rc.0 react-dom@17.0.0-rc.0
oder alternativ über yarn:
yarn add react@17.0.0-rc.0 react-dom@17.0.0-rc.0
Alternativ könnt ihr die neue Version auch als UMD über CDN in eure Projekte einbinden:
<script crossorigin src="https://unpkg.com/react@17.0.0-rc.0/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17.0.0-rc.0/umd/react-dom.production.min.js"></script>
Weitere, detaillierte Installationsanweisungen findet ihr in der Doku.
- Neue React-Features: Concurrent Mode revolutioniert die User-Experience
- React Hooks: Lohnt die Umstellung auf das Programmier-Konzept?
- React-Framework Next.js erreicht Version 9.5: Das ist drin