Problem

React ist großartig, aber auch groß. Es versucht den DOM so weit wie möglich zu abstrahieren, um Entwickler*innen vor browserspezifischen Kompatibilitätsproblemen zu bewahren – selbst wenn diese inzwischen durch verbesserte Standards geradegezogen wurden. Beispielsweise werden die vom Browser generierten Events in React nicht einfach durchgereicht, sondern durch eigene Objekte ersetzt. Das schlägt sich auch in der Performance und Bundle-Größe nieder.

Alternative

Preact [1] baut die API von React weitgehend treu nach – auf den ersten Blick ist es von React kaum zu unterscheiden. Die üblichen Hooks stehen zur Verfügung (plus ein sehr bequemer useErrorBoundary-Hook). Viele 3rd-party Librarys für React funktionieren einfach so mit Preact (z. B. Material-UI [4]).
Welche Unterschiede [2] am wichtigsten sind, hängt vom Anwendungsfall ab. Hier sind einige:

  • Preact ist komplett in TypeScript geschrieben [3] – die Types selber sind dabei häufig unterschiedlich zu denen in React. Beispielsweise gibt es anstelle von ReactNode und FunctionComponent<P> andere Typen wie ComponentChildren und VNode<P>.
  • Event-Listener bekommen als Parameter browser-native Event-Objekte. Das hat auch zur Folge, dass diese nicht durch Portale bubblen.
  • Die Imports sind etwas anders strukturiert (siehe Beispiel).

Beispiel

import { Fragment, h, render } from "preact"
import { useState } from "preact/hooks"
 
const App = () => {
  const [count, setCount] = useState(0)
  const increment = () => setCount(n => n + 1)
  return (
    <>
      <h1>Clicks: {count}</h1>
      <button onClick={increment}>Add one</button>
    </>
  )
}
 
render(<App />, document.getElementById("app"))
jambit ToiletPaper161 Preact Visual

Vorteile

  • Gute Dokumentation, die beim Umstieg hilft.
  • Klein. Zur Veranschaulichung habe ich eine minimale Hello-World App gebaut:

    • React: 129.23 KiB
      gzip: 41.68 KiB

    • Preact: 11.08 KiB
      gzip: 4.54 KiB

  • Weniger DOM-Abstraktion, was nur ein Problem sein sollte, wenn man besonders alte Browser unterstützen muss.
  • In modularem TypeScript implementiert.

Nachteile

  • Die API ist nicht komplett identisch (vor allem bei den Types). Das kann ein bisschen Umlernen erfordern. Einige Features die für mehr React-Kompatibilität nötig sind (z.B. in 3rd-party Libraries) sind über das preact/compat package verfügbar.
  • Möglicherweise Kompatiblitätsprobleme mit komplexeren Libraries, die auf React-Interna zugreifen. Gerade für die größeren Libraries gibt es aber bereits häufig Tutorials oder Adapter, sofern diese benötigt werden (z.B. mobx-preact).

---

[1] https://preactjs.com
[2] https://preactjs.com/guide/v10/differences-to-react
[3] https://preactjs.com/guide/v10/typescript
[4] https://twitter.com/preactjs/status/1152267975078154240

---

Autor: Philipp Miller / Software Engineer / Business Division Automotive

SCHREIB UNS

* Pflichtfeld

SCHREIB UNS

* Pflichtfeld

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen