managarten/apps-archived/maerchenzauber/docs/expo-ui.md
Till-JS 61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00

8.2 KiB

Expo UI Documentation

Überblick

Expo UI (@expo/ui) ist eine innovative Bibliothek von nativen UI-Komponenten, die es ermöglicht, vollständig native Benutzeroberflächen mit SwiftUI (iOS) und Jetpack Compose (Android) direkt in React Native Apps zu erstellen. Die Bibliothek bringt moderne, deklarative UI-Frameworks direkt in React Native und ermöglicht es Entwicklern, die Vorteile beider Welten zu nutzen.

Status und Verfügbarkeit

  • Aktueller Status: Alpha (Stand: 2025)
  • Verfügbarkeit: Nur in Development Builds (nicht in Expo Go)
  • Breaking Changes: Häufig zu erwarten während der Alpha-Phase
  • Priorität: SwiftUI-Support zuerst, dann Jetpack Compose und Web/DOM

Installation

npx expo install @expo/ui

Kernkonzepte

Host Component

Die Host-Komponente ist der Container für alle Expo UI Komponenten. Sie funktioniert ähnlich wie:

  • <svg> für DOM
  • <Canvas> für react-native-skia

Unter der Haube verwendet sie UIHostingController um SwiftUI Views in UIKit zu rendern.

import { Host } from '@expo/ui/swift-ui';

<Host style={{ flex: 1 }}>{/* Expo UI Komponenten hier */}</Host>;

1-zu-1 Mapping

Expo UI bietet eine direkte Abbildung zu nativen UI-Frameworks:

  • SwiftUI Views für iOS
  • Jetpack Compose Components für Android

Verfügbare Komponenten

SwiftUI Components (@expo/ui/swift-ui)

Komponente Beschreibung
Host Container für SwiftUI Komponenten
Button Native Button mit System-Images
Text Native Text-Komponente
VStack Vertikales Layout
ContextMenu Kontextmenü
DateTimePicker Datum/Zeit-Auswahl
Picker Segmented und Wheel-Varianten
Slider Schieberegler
Switch Toggle/Schalter
LinearProgress Fortschrittsbalken
BottomSheet Bottom Sheet Modal

Jetpack Compose Components (@expo/ui/jetpack-compose)

Komponente Beschreibung
TextInput Native Texteingabe
Button Native Android Button
Weitere Komponenten in Entwicklung

Code-Beispiele

Basis-Beispiel mit SwiftUI

import { Host, VStack, Text, Button } from '@expo/ui/swift-ui';

function MyComponent() {
	return (
		<Host style={{ flex: 1 }}>
			<VStack spacing={8}>
				<Text>Willkommen bei Expo UI!</Text>
				<Button onPress={() => console.log('Geklickt!')}>Klick mich</Button>
			</VStack>
		</Host>
	);
}

Bottom Sheet Beispiel

import { BottomSheet, Host, Text } from '@expo/ui/swift-ui';
import { useState } from 'react';
import { useWindowDimensions } from 'react-native';

function BottomSheetExample() {
	const [isOpened, setIsOpened] = useState(false);
	const { width } = useWindowDimensions();

	return (
		<Host style={{ position: 'absolute', width }}>
			<BottomSheet isOpened={isOpened} onIsOpenedChange={(e) => setIsOpened(e)}>
				<Text>Sheet-Inhalt hier</Text>
			</BottomSheet>
		</Host>
	);
}

Jetpack Compose TextInput

import { TextInput } from '@expo/ui/jetpack-compose';

function AndroidInput() {
	const [value, setValue] = useState('');

	return <TextInput autocorrection={false} defaultValue="Standardtext" onChangeText={setValue} />;
}

Integration mit React Native

Mixing Components

Du kannst React Native Komponenten als JSX-Children von Expo UI Komponenten verwenden:

import { Host, VStack } from '@expo/ui/swift-ui';
import { View, Text as RNText } from 'react-native';

function MixedComponent() {
	return (
		<Host style={{ flex: 1 }}>
			<VStack>
				{/* React Native Komponente innerhalb von Expo UI */}
				<View>
					<RNText>React Native Text</RNText>
				</View>
			</VStack>
		</Host>
	);
}

Expo UI erstellt automatisch einen UIViewRepresentable Wrapper für React Native Komponenten.

Vorteile von Expo UI

1. Native Performance

  • Direkte Nutzung von SwiftUI und Jetpack Compose
  • Keine Bridge-Overhead für UI-Updates
  • Optimierte native Animationen und Transitions

2. Moderne UI-Patterns

  • Zugriff auf die neuesten nativen UI-Features
  • System-konsistentes Design out-of-the-box
  • Native Gesten und Interaktionen

3. Flexibilität

  • Full-App Support: Gesamte App in Expo UI schreibbar
  • Component-Level Mixing: Mische React Native, Expo UI, DOM und Custom 2D Components
  • Schrittweise Migration möglich

4. Developer Experience

  • TypeScript Support mit vollständigen Typen
  • Hot Reload Support
  • Vertraute React-Patterns

Einschränkungen und Überlegungen

Aktuelle Einschränkungen

  1. Alpha Status: API kann sich häufig ändern
  2. Dokumentation: Noch nicht vollständig, nutze TypeScript-Typen zur API-Exploration
  3. Platform Support: SwiftUI-Support priorisiert, Jetpack Compose noch in Entwicklung
  4. Expo Go: Nicht unterstützt, Development Build erforderlich

Performance-Überlegungen

  • Host-Components haben einen gewissen Overhead
  • Für einfache UI-Elemente kann React Native effizienter sein
  • Ideal für komplexe, native UI-Patterns

Best Practices

1. Strukturierung

// Separiere native UI in eigene Komponenten
function NativeSheet({ children }) {
	return (
		<Host style={{ flex: 1 }}>
			<BottomSheet>{children}</BottomSheet>
		</Host>
	);
}

2. Platform-spezifischer Code

import { Platform } from 'react-native';

const NativeButton = Platform.select({
	ios: require('@expo/ui/swift-ui').Button,
	android: require('@expo/ui/jetpack-compose').Button,
});

3. TypeScript nutzen

import type { ButtonProps } from '@expo/ui/swift-ui';

interface MyButtonProps extends ButtonProps {
	variant?: 'primary' | 'secondary';
}

Zukunft von Expo UI

Roadmap 2025

  1. Q1-Q2 2025: Stabilisierung der SwiftUI-Integration
  2. Q3 2025: Vollständiger Jetpack Compose Support
  3. Q4 2025: Web/DOM Support
  4. 2026: Stable Release geplant

Geplante Features

  • Mehr native Komponenten
  • Bessere React Native Integration
  • Custom Native Component Support
  • Theming und Styling System
  • Animation APIs

Migration Guide

Von React Native zu Expo UI

// Vorher (React Native)
import { TouchableOpacity, Text } from 'react-native';

<TouchableOpacity onPress={handlePress}>
	<Text>Click me</Text>
</TouchableOpacity>;

// Nachher (Expo UI)
import { Host, Button } from '@expo/ui/swift-ui';

<Host>
	<Button onPress={handlePress}>Click me</Button>
</Host>;

Troubleshooting

Häufige Probleme

Problem: Components werden nicht angezeigt

  • Lösung: Stelle sicher, dass Components in einem Host gewrappt sind

Problem: Build-Fehler mit Expo Go

  • Lösung: Verwende Development Build: npx expo run:ios oder npx expo run:android

Problem: TypeScript-Fehler

  • Lösung: Update auf neueste @expo/ui Version

Ressourcen

Offizielle Dokumentation

Community

Beispiel-Projekte

Fazit

Expo UI repräsentiert einen innovativen Ansatz für React Native Development, der die Grenzen zwischen React Native und nativen UI-Frameworks verschwimmen lässt. Während es sich noch in der Alpha-Phase befindet, zeigt es bereits das Potenzial für die Zukunft der mobilen App-Entwicklung mit React Native.

Für das Märchenzauber-Projekt könnte Expo UI besonders interessant sein für:

  • Native Picker-Komponenten für Sprachauswahl
  • BottomSheets für Story-Optionen
  • Native Animationen für magische Übergänge
  • System-konsistente UI-Elemente