menu Menu

Ein kompaktes und vielseitiges Toolkit für die Entwicklung moderner Web-Apps

React, Suspense API, Vite, Valtio, Chakra UI, FormatJS und Convert-Units

React, Suspense API, Vite, Valtio, Chakra UI, FormatJS und Convert-Units

Die Entwicklung moderner Webanwendungen mit Web Components kann eine wirklich interessante Aufgabe sein, insbesondere wenn ein Projekt die Implementierung dynamischer und reichhaltiger Benutzererlebnisse umfasst, aber versucht, die Komplexität der Entwicklungserfahrung („dx“) nicht unnötig zu erhöhen und nicht zu viel unnötiges Gewicht zum endgültigen Build hinzuzufügen.

Für diesen Fall habe ich React 18, Vite als Tooling, React Suspense API, Valtio als Store, Chakra UI für die Benutzeroberfläche, FormatJS zur Handhabung mehrerer Sprachen und Formate je nach Standort und die hervorragende Convert-Units, eine Javascript-Bibliothek, die eine riesige Anzahl von Hilfsmitteln zur Umrechnung von Maßeinheiten (zwischen metrischen und imperialen, unter anderem Konventionen) sowohl für Längen-, Flächen-, Volumen-, Massen-, Zeit-, Geschwindigkeits-, Drehmoment-, Druck-, Beleuchtungs-, Spannungs-, Leistungs-, Energie-, Kraft- und viele andere Maßeinheiten, verwendet.

Das Ziel war es, einen Kit-Leveling-Calculator für die Installation von Porzellanfliesen zu erstellen.

Im zweiten Teil dieses Beitrags werde ich die App vorstellen. Ich möchte jedoch auf den offiziellen Start meines Kunden warten, um sie vollständig zu zeigen.

Die Entwicklungserfahrung war äußerst zufriedenstellend, und das erworbene Wissen ermöglichte es mir, ein kompaktes und vielseitiges Toolkit aus Technologien, Bibliotheken und Tools zusammenzustellen. Ich würde diese Kombination ohne Zweifel wieder für neue Projekte wählen.

In diesem Fall habe ich allein gearbeitet und es innerhalb von zwei Wochen abgeschlossen.1

import { Suspense, useContext, useEffect } from "react";
import { store as calcStore } from "./stores/calcstore";
import { useSnapshot } from "valtio";
import { LocaleContext } from "./i18n/LocaleContext";
import "./fonts/Inter-Regular.ttf";
import "./fonts/Inter-SemiBold.ttf";
import Calculator from "./components/Calculator";
import { useDocL10n } from "./i18n/useDocL10n";
import { Flex, Spinner } from "@chakra-ui/react";

const App = () => {
  const sCalcData = useSnapshot(calcStore.data);

  // eslint-disable-next-line no-unused-vars
  const { locale, setLocale } = useContext(LocaleContext);

  useDocL10n();

  useEffect(() => {
    setLocale(sCalcData.selectedLocaleId);
  });

  return (
    <Suspense
      fallback={
        <Flex justifyContent="center" alignItems="center" h="100vh" w="full">
          <Spinner
            color="brand.400"
            size="xl"
            thickness="4px"
            speed="0.65s"
            emptyColor="gray.200"
          />
        </Flex>
      }
    >
      <Calculator />
    </Suspense>
  );
};

export default App;Code language: JavaScript (javascript)

Projektübersicht

Der Kit-Leveling-Calculator für die Installation von Porzellanfliesen ist eine Webanwendung, die darauf abzielt, Fachleuten und Heimwerkern bei der Installation von Porzellanfliesen zu helfen. Die Anwendung ermöglicht es, die benötigte Menge an Clips, Keilen und Zangen zu berechnen, um eine präzise und ebenmäßige Installation sicherzustellen. Zu den herausragendsten Merkmalen gehören:

Mehrsprachigkeit und Multi-Locale

Die Anwendung unterstützt verschiedene Sprachen und lokale Formate und passt sich somit den Nutzern aus verschiedenen Regionen an.

Dies umfasst die Umrechnung von Maßeinheiten zwischen dem metrischen System (Meter, Zentimeter, Millimeter) und dem imperialen System (Fuß und Zoll) sowie die Handhabung unterschiedlicher Tausender- und Dezimaltrennzeichen.

Verzögertes Laden von Assets

Durch die Nutzung der React Suspense API werden Ressourcen effizient geladen, was die Leistung und Benutzererfahrung verbessert.

Verwendete Technologien

React

React ist eine weit verbreitete JavaScript-Bibliothek zur Erstellung von Benutzeroberflächen. Ihre Fähigkeit, Single-Page-Anwendungen (SPA) mit wiederverwendbaren Komponenten zu handhaben, macht sie zu einer idealen Wahl für dieses Projekt. React erleichtert die Erstellung interaktiver und dynamischer Benutzeroberflächen durch die Verwendung eines virtuellen DOM, das effiziente Aktualisierungen und eine optimierte Leistung ermöglicht.

Die React-Community ist umfangreich und aktiv und bietet eine Vielzahl an ergänzenden Bibliotheken und Werkzeugen.

Wiederverwendbare Komponenten

Die komponentenbasierte Architektur von React ermöglicht die Wiederverwendung von Code, was die Entwicklung beschleunigt und die Wartung erleichtert.

Vite

Vite ist ein Werkzeug der neuen Generation zur Erstellung von Builds, das eine schnelle und effiziente Entwicklungserfahrung bietet. Im Gegensatz zu traditionellen Tools nutzt Vite die nativen ES-Module des Browsers, um eine sofortige Kompilierung und ein ultrarasches Hot-Reload zu ermöglichen.

Valtio

Valtio ist eine State-Management-Bibliothek für React. Im Gegensatz zu anderen Lösungen wie Redux verwendet Valtio JavaScript-Proxies, um den Zustand reaktiv und effizient zu verfolgen und zu aktualisieren.

Vergleich mit anderen State-Management-Tools (Redux, MobX)

  • Einfachheit: Valtio ist einfacher zu bedienen im Vergleich zu Redux, das eine komplexere Konfiguration erfordert.
  • Reaktivität: Ähnlich wie MobX bietet Valtio eine automatische Reaktivität, jedoch mit einer einfacheren API.
  • Leistung: Dank der Verwendung von Proxies bietet Valtio eine optimale Leistung, indem unnötige Statusaktualisierungen vermieden werden.

FormatJS

FormatJS ist eine Sammlung von JavaScript-Bibliotheken für die Internationalisierung, die es ermöglicht, Anwendungen zu erstellen, die mehrere Sprachen und lokale Formate unterstützen. Mit FormatJS ist es möglich, die Lokalisierung von Texten, Zahlen, Daten und Maßeinheiten auf einfache Weise zu handhaben.

Handhabung verschiedener Sprachen, Zahlenformate und Maßeinheiten

  • Textinternationalisierung: FormatJS ermöglicht die Definition und Verwaltung von Textstrings in verschiedenen Sprachen.
  • Formatierung von Zahlen und Daten: Die Bibliothek stellt Werkzeuge zur Verfügung, um Zahlen und Daten gemäß den lokalen Konventionen zu formatieren.
  • Einheitenumrechnung: Die Anwendung kann die Umrechnung von Maßeinheiten zwischen metrischem und imperialem System automatisch handhaben.

ChakraUI

ChakraUI ist eine Komponentenbibliothek für Benutzeroberflächen in React, die eine Reihe von zugänglichen und stilisierten Komponenten bietet. Sein Fokus auf Barrierefreiheit und Anpassungsfähigkeit macht es zu einer ausgezeichneten Wahl für das Design moderner und responsiver Benutzeroberflächen.

  • Zugängliche Komponenten: ChakraUI stellt sicher, dass alle seine Komponenten den Barrierefreiheitsrichtlinien entsprechen und so eine bessere Benutzererfahrung für alle bieten.
  • Einfache Anpassung: Die Themen und Stile von ChakraUI sind leicht anpassbar, sodass das Erscheinungsbild der Anwendung an die spezifischen Anforderungen des Projekts angepasst werden kann.
  • Schnelle Entwicklung: Die Bibliothek bietet eine breite Palette an vordefinierten Komponenten, wodurch die Entwicklung beschleunigt wird und der Fokus auf die Geschäftlogik gelegt werden kann.

Convert-Units

Convert-units bietet eine einfache API mit verkettbaren Funktionen, die benutzerfreundlich und leicht lesbar ist. Sie kann sowohl mit integrierten als auch benutzerdefinierten Maßeinheiten konfiguriert werden.

Eine einfache Möglichkeit, zu verstehen, wie sie funktioniert, ist durch einige Beispiele:

Die Umrechnung zwischen Maßeinheitensystemen (metrisch und imperial) wird automatisch gehandhabt:

Alle Maßeinheiten auflisten, in die eine bestimmte Einheit umgerechnet werden kann:

`allMeasures` umfasst alle integrierten Maßeinheiten der Bibliothek
import configureMeasurements from 'convert-units';
import allMeasures from 'convert-units/definitions/all';

const convert = configureMeasurements(allMeasures);Code language: JavaScript (javascript)

Umrechnung zwischen Maßeinheiten:

convert(1).from('l').to('ml');
// 1000Code language: JavaScript (javascript)

Die Umrechnung zwischen Maßeinheitensystemen (metrisch und imperial) wird automatisch verwaltet:

convert(1).from('lb').to('kg');
// 0.4536...Code language: JavaScript (javascript)
convert().measures();
// [ 'length', 'mass', 'volume', ... ]

const differentConvert = configureMeasurements({
    volume,
    mass,
    length,
    area,
});
differentConvert().measures();
// [ 'length', 'mass', 'volume', 'area' ]Code language: JavaScript (javascript)

The translation into German is:

Alle Maßeinheiten auflisten, in die eine bestimmte Einheit umgerechnet werden kann:

convert().from('l').possibilities();
// [ 'ml', 'l', 'tsp', 'Tbs', 'fl-oz', 'cup', 'pnt', 'qt', 'gal' ]

convert().from('kg').possibilities();
// [ 'mcg', 'mg', 'g', 'kg', 'oz', 'lb' ]Code language: JavaScript (javascript)

Herausforderungen und Lösungen

Während der Entwicklung dieser Anwendung traten mehrere Herausforderungen auf, die kreative und effiziente Lösungen erforderten.

Leistung

Eine der größten Herausforderungen bestand darin, sicherzustellen, dass die Anwendung schnell und reaktionsfähig bleibt, selbst bei verzögertem Laden von Assets und Echtzeit-Internationalisierung.

Die Lösung bestand darin, Vite für den schnellen Build-Prozess und Valtio für das effiziente State Management zu nutzen.

Komplexe Internationalisierung

Eine weitere Herausforderung war die korrekte Handhabung der Internationalisierung und Lokalisierung für verschiedene Sprachen und Formate.

FormatJS war entscheidend, um diesen Prozess zu vereinfachen. Dennoch musste sichergestellt werden, dass alle Zeichenketten und Formate konsistent und präzise waren.

Zustandsverwaltung

Das effiziente und reaktive globale State Management stellte ebenfalls eine Herausforderung dar. Valtio vereinfachte diesen Prozess, indem es eine intuitive API und automatische Statusaktualisierungen bereitstellte, wodurch die Überlastung durch komplexere State-Management-Lösungen vermieden wurde.

Fazit

Die Entwicklung dieser Web-App war eine bereichernde Erfahrung, die die Effektivität von Technologien und Ressourcen wie React, Vite, Valtio, Chakra UI und FormatJS unter Beweis stellte.

Die Möglichkeit, eine mehrsprachige und multi-locale Anwendung in nur zwei Wochen zu implementieren, während ich als alleiniger Entwickler und gleichzeitig frischgebackener Vater auch noch andere Aufgaben bewältigte, unterstreicht meiner Meinung nach die Leistungsfähigkeit und Effizienz dieser Technologien.

Die Wahl von ChakraUI für die Benutzeroberfläche ermöglichte die schnelle Entwicklung einer stilisierten und zugänglichen Anwendung, während die Suspense API von React die Leistung durch verzögertes Laden von Komponenten erheblich verbesserte.

Zusammenfassend lässt sich sagen, dass dieses Projekt nicht nur die funktionalen und leistungsbezogenen Ziele erfüllte, sondern auch wertvolle Lektionen und Best Practices für die Entwicklung moderner Frontend-Anwendungen vermittelte.


  1. Ich halte zwei Wochen für eine relativ kurze Zeit, wenn man bedenkt, dass ich mehrmals auf Material, Feedback und vom Kunden angeforderte Änderungen warten musste. Als unabhängiger Entwickler für dieses Projekt und als frischgebackener Vater eines neun Monate alten Babys ist meine Aufmerksamkeit erheblich fragmentiert. ↩︎

chakraui convert-units deutsche ecmascript FormatjS german javascript react suspense api valtio vite


Previous Next

Leave a Reply

Your email address will not be published. Required fields are marked *

Cancel Post Comment

keyboard_arrow_up