Hooks revolutionierten die React-Entwicklung, indem sie es funktionalen Komponenten ermöglichten, Status, Nebenwirkungen und komplexe Logik elegant zu verwalten. Mit React 19 wurden neue Hooks eingeführt, um den Workflow weiter zu rationalisieren. In diesem Artikel werden wir klassische Hooks, erweiterte Hooks und die Neuerungen in Version 19 anhand praktischer Beispiele untersuchen.
Grundlegende Reaktionshaken
useState: Einfache Statusverwaltung
Verwaltet lokale Zustände in Funktionskomponenten. Ideal für Werte, die sich im Laufe der Zeit ändern.
Beispiel: Interaktiver Zähler
import { useState } aus 'react';
Funktion Counter() { const [count, setCount] = useState(0);
zurück (
Sie haben {count} Mal geklickt
<button onClick={() => setCount(count + 1)}> InkrementuseEffect: Nebenwirkungen
Führt Code nach dem Rendern aus, z. B. API-Aufrufe oder DOM-Manipulation.
Beispiel: Daten von einer API abrufen
import { useState, useEffect } from 'react';
Funktion UserList() { const [users, setUsers] = useState([]);
useEffect(() => { fetch('https://api.example.com/users') .then(response => Response.json()) .then(data => setUsers(data)); }, []); // Nur einmal ausführen
zurück (
-
{users.map(user => (
- {user.name} ))}
useContext: Globale Statusfreigabe
Greift auf Kontextwerte zu, ohne Prop Drilling durchzuführen.
Beispiel: Dunkel/Hell-Thema
import { createContext, useContext, useState } from 'react';
const ThemeContext = createContext();
Funktion App() { const [theme, setTheme] = useState('light');
zurück (
<ThemeContext.Provider value=>
Funktion Toolbar() { const { theme, setTheme } = useContext(ThemeContext);
zurück ( <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}> Zum Thema wechseln {theme === 'light' ? 'dunkel': 'hell'} ); }
useRef: Veränderbare Referenzen
Speichert Werte, die zwischen den Renderings bestehen bleiben, ohne dass es zu erneuten Renderings kommt.
Beispiel: Fokus auf Eingabe
import { useRef } aus 'react';
Funktion TextInput() { const inputRef = useRef(null);
const focusInput = () => { inputRef.current.focus(); };
zurück (
Erweiterte und benutzerdefinierte Hooks
useReducer: Komplexer Zustand
Verwaltet Zustände mit ausgefeilterer Logik, ähnlich wie Redux.
Beispiel: Aufgabenliste
import { useReducer } aus 'react';
Funktion todosReducer(state, action) { switch (action.type) { Fall 'ADD_TODO': return [...state, { text: action.text, abgeschlossen: false }]; Fall 'TOGGLE_TODO': return state.map((todo, index) => index === action.index ? { ...todo, abgeschlossen: !todo.completed } : todo ); Standard: Rückkehrzustand; } }
Funktion TodoApp() { const [Todos, Dispatch] = useReducer(todosReducer, []);
const handleSubmit = (e) => { e.preventDefault(); Dispatch({ Typ: 'ADD_TODO', Text: e.target.elements.todo.value }); e.target.reset(); };
zurück (
useMemo und useCallback: Leistungsoptimierung
- useMemo: Speichert berechnete Werte.
- useCallback: Merkt sich Funktionen.
Beispiel: Schwere Berechnung
import { useMemo, useState } from 'react';
Funktion ExpensiveComponent({ list }) { const sortedList = useMemo(() => { console.log('Bestellliste...'); return [...list].sort(); }, [Liste]);
return
Benutzerdefinierte Hooks: Wiederverwendung von Logik
Beispiel: useFetch für HTTP-Anfragen
import { useState, useEffect } from 'react';
Funktion useFetch(url) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true);
useEffect(() => { abrufen(URL) .then(res => res.json()) .then(data => { setData(date); setLoading(false); }); }, [URL]);
return { Daten, wird geladen }; }
// Verwendung in der Komponente:
Funktion UserProfile({ userId }) {
const { Daten: Benutzer, wird geladen } = useFetch(https://api.example.com/users/${userId});
if (loading) return
Neue React 19 Hooks
useOptimistic: Optimistische Updates
Aktualisiert die Benutzeroberfläche vor dem Server-Commit und führt bei einem Fehler ein Rollback durch.
Beispiel: Hinzufügung eines optimistischen Kommentars
import { useOptimistic } from 'react';
Funktion CommentForm({ onSubmit }) { const [optimisticComments, addOptimisticComment] = useOptimistic( [], (state, newComment) => [...state, { text: newComment, sent: true }] );
const handleSubmit = async (e) => { e.preventDefault(); const formData = new FormData(e.target); const comment = formData.get('comment');
addOptimisticComment(comment);
versuche es mit {
Warten Sie auf onSubmit(comment);
} Catch (Fehler) {
// Die Benutzeroberfläche zurücksetzen, wenn die Anfrage fehlschlägt
}
};
zurück (
useResource: Integration mit Suspense
Verwaltet asynchrone Daten deklarativ.
Beispiel: Laden von Daten mit Fallback
import { useResource, Suspense } from 'react';
Funktion fetchUser(id) { // Gibt ein Versprechen zurück }
Funktion UserProfile({ userId }) { const userResource = useResource(() => fetchUser(userId));
return
// Verwendung in der übergeordneten Komponente: <Suspense fallback={
useEventListener: Vereinfachte Ereignis-Listener
Verwaltet Ereignis-Listener sauber.
Beispiel: Fenstergröße überwachen
import { useEventListener } aus 'react';
Funktion WindowSize() { const [size, setSize] = useState({ width: window.innerWidth, height: window.innerHeight });
useEventListener('resize', () => { setSize({ width: window.innerWidth, height: window.innerHeight }); });
return
useMediaQuery: Responsive Design
Reagiert auf Änderungen in Medienanfragen.
Beispiel: Dunkles Theme mit Systemeinstellungen
import { useMediaQuery } aus 'react';
Funktion DarkModeToggle() { constprefersDark = useMediaQuery('(prefers-color-scheme: dark)'); const [isDark, setIsDark] = useState(prefersDark);
// Aktualisieren Sie das Site-Thema hier ...
zurück ( <button onClick={() => setIsDark(!isDark)}> {isDark? 'Dunkelmodus deaktivieren': 'Dunkelmodus aktivieren'} ); }
useErrorBoundary: Elegante Fehlerbehandlung
Fängt Fehler in untergeordneten Komponenten ab.
Beispiel: Benutzerdefinierter Fehlerschwellenwert
import { useErrorBoundary } from 'react';
Funktion ErrorProneComponent() { const { ErrorBoundary, didCatch, error } = useErrorBoundary();
return didCatch ? (
Fazit
React-Hooks entwickeln sich ständig weiter und bringen leistungsstarke Tools mit sich, die die Entwicklung vereinfachen. Mit React 19 verbessern Funktionen wie useOptimistic und useResource das Benutzererlebnis, indem sie asynchrone Vorgänge reibungslos verarbeiten, während Hooks wie useMediaQuery und useEventListener die Erstellung adaptiver Schnittstellen erleichtern.
Wenn Sie diese Hooks beherrschen, von den Grundlagen bis hin zu den neuesten, sind Sie in der Lage, robustere, leistungsfähigere und einfacher zu wartende Anwendungen zu erstellen. Versuchen Sie, diese Techniken in Ihre Projekte zu integrieren und sehen Sie, wie sie Ihren Arbeitsablauf verändern! 🚀
Lesen Sie auch
- TypeScript für Anwendungen: TypeScript-Entwicklungshandbuch
- So erstellen Sie eine Website: Vollständiger Leitfaden von Null bis Ar
- So erstellen Sie eine professionelle Website: Vollständiger Leitfaden
- Erstellen professioneller Websites: Vollständiger Leitfaden zur Webentwicklung
- Moderne Webentwicklung im Jahr 2025: Trends, Tools und innovative Strategien
- UX Best Practices für komplexe Formulare mit React Hook Form
