React
Basisdaten
Maintainer Meta Platforms (vormals Facebook Inc.)
Entwickler Facebook Inc., Instagram und die Open Source Community
Erscheinungsjahr 2013
Aktuelle Version 18.2.0
(14. Juni 2022)
Betriebssystem Plattformunabhängig
Programmiersprache JavaScript
Kategorie Bibliothek
Lizenz MIT
reactjs.org

React ist eine JavaScript-Programmbibliothek zur Erstellung von webbasierten Benutzeroberflächen. Komponenten werden in React hierarchisch aufgebaut und können in dessen Syntax als selbst definierte JSX-Tags repräsentiert werden. Das Modell von React verspricht durch die Konzepte des unidirektionalen Datenflusses und des Virtual DOM den einfachen, aber trotzdem performanten Aufbau auch komplexer Anwendungen. React bildet typischerweise die Basis für Single-Page-Webanwendungen, kann jedoch auch mit Node.js serverseitig (vor-)gerendert werden.

Geschichte

React wurde ursprünglich von Jordan Walke, einem Softwareentwickler bei Facebook, entwickelt und 2011 erstmals für Facebooks Newsfeed und später 2012 für Instagram eingesetzt. Im Mai 2013 wurde von Facebook angekündigt, React zukünftig als Open-Source-Projekt weiterführen zu wollen. Im Oktober 2014 wurde die Lizenz von der anfangs Apache-Lizenz auf die BSD-Lizenz mit zusätzlicher Patentlizenz geändert, welche den Widerruf der Lizenz bei Klagen gegen oder bei Patentstreitigkeiten mit Facebook vorbehält. Diese unkonventionelle Klausel führte zu einer kontroversen Diskussion. Eine Umformulierung dieser Patentklausel im April 2015 beendete die Auseinandersetzung nicht. Im Juli 2017 kündigte die Apache Software Foundation an, keine Apache-Projekte mehr mit dieser Zusatzlizenz zu erlauben. Entgegen anfänglichen Angaben, nicht von der Klausel abrücken zu wollen, veröffentlichte Facebook im September 2017 React in der Version 16.0.0 unter der MIT-Lizenz.

Releasefrequenz, Support und Abwärtskompatibilität

React Releases folgen dem Konzept des Semantic Versionings. Es wird zwischen Major-, Minor- und Bugfix-Releases unterschieden. Es wird versucht nicht abwärtskompatible Major Release zu vermeiden und neue Features primär in Minor Releases zu veröffentlichen. Bislang gab es Major Releases alle ein bis drei Jahre. Long Term Support (LTS) gibt es offiziell keinen. Sobald eine Major Release ausgeliefert wird, werden für frühere Releases keine Bugfixes mehr geliefert. Eine Ausnahme dazu dürften kritische Sicherheitsfehler darstellen. In diesem Fall werden Bugfix-Releases für die letzten Minor-Releases ausgeliefert.

Kernkonzepte

Unidirektionaler Datenfluss

In Kombination mit der deklarativen Natur der Komponentendefinition in React sollen mittels eines unidirektionalen Datenflussmodells der Aufbau und die Wechselwirkungen zwischen Komponenten vereinfacht werden. Anders als beispielsweise mittels komplexem Event Handling erhält eine Komponente Daten nur über statische Eigenschaften, die dieser übergeben wurden. Eine Komponente kann ihr übergebene Eigenschaften in diesem Modell nicht ändern. Eigenschaften können jedoch übergebene Callback-Funktionen sein und somit die übergeordneten Komponenten beeinflussen.

Virtual DOM und DOM-Diffing

Die Kernidee von React besteht in der Annahme, dass der komplette, der betroffenen Komponente untergeordnete Anwendungsbaum bei jeder Änderung einer Eigenschaft der Komponente neu aufgebaut wird. Da es in der Praxis performanceintensiv sein kann, dies z. B. im Webbrowser innerhalb des DOM durchzuführen, wurde das Konzept des „Virtual DOM“ geschaffen. Die damit verbundene Technik des „DOM-Diffing“ beschreibt das selektive Aktualisieren des DOM auf Basis eines Vergleichs zwischen ursprünglichem und geändertem Virtual DOM.

Als Beispiel kann ein Entwickler bei einer Messaging-Anwendung in einer Inbox davon ausgehen, dass die Auflistung aller Nachrichten und der untenstehende Zähler der Nachrichtenanzahl bei jeder neuen Nachricht komplett neu aufgebaut werden. Das DOM-Diffing sorgt in diesem Fall dafür, dass lediglich die veränderten Teile (in diesem Fall die ergänzte neue Nachricht und der aktualisierte Zähler) im DOM aktualisiert werden.

JavaScript syntax extension (JSX)

Mit Hilfe der eingebauten, an XML angelehnten Template-Sprache JSX (Javascript XML) steht optional eine Syntax für die Deklaration von React-Komponenten zur Verfügung, die es erlaubt, Javascript-Logik, HTML und CSS in eine React-Komponente einzukapseln und modular in Web-Applikationen einzusetzen.

Kritik

Anders als bei strikten MVC-Modellen wird in React ein komponentenzentriertes Modell vorgeschlagen, welches Logik für Interaktion und Darstellung innerhalb einer Funktion bündelt. Dies wird insbesondere aufgrund der weitverbreiteten strikten Trennung zwischen Markup und Logik in Form von Templating-Systemen oft kritisch gesehen.

Einzelnachweise

  1. 18.2.0 (June 14, 2022). (abgerufen am 23. Juni 2022).
  2. registry.npmjs.com. In: npmjs. (abgerufen am 1. März 2023).
  3. React v16.0. In: React Blog. 26. September 2017 (englisch).
  4. A JavaScript library for building user interfaces - React. Abgerufen am 13. April 2017.
  5. Multiple Components. In: React Documentation.
  6. BSD + PATENTS · facebook/react@dcf415c. Abgerufen am 28. September 2017 (englisch).
  7. Berkana: A compelling reason not to use ReactJS. In: Bits and Pixels. 24. Mai 2015, abgerufen am 28. September 2017 (englisch).
  8. Update Patent Grant · facebook/react@b8ba8c8. Abgerufen am 28. September 2017 (englisch).
  9. Julia Schmidt: Apache Software Foundation will keine Projekte mit Facebook-Lizenz unter ihrem Dach. Hrsg.: heise Online. 21. Juli 2017 (heise.de).
  10. Julia Schmidt: Facebook wird nicht von seiner Open-Source-Lizenz abrücken. Hrsg.: heise Online. 21. August 2017 (heise.de).
  11. Julia Schmidt: React bekommt doch neue Lizenz. Hrsg.: heise Online. 25. September 2017 (heise.de).
  12. Andrew Clark: React v16.0. In: Facebook (Hrsg.): React Blog. 26. September 2017 (englisch, github.io): “React 16 is available under the MIT license.”
  13. Versioning Policy. Abgerufen am 5. Dezember 2021 (englisch).
  14. Dan Abramov: Major version LTS dates. 24. Februar 2019, abgerufen am 6. Dezember 2021 (englisch).
  15. JSX in Depth. In: React Documentation. Abgerufen am 6. September 2016.
  16. Draft: JSX Specification. In: JSX Specification. Abgerufen am 6. September 2016.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.