Eigenen React-Hook mit TypeScript und Tests erstellen
Entwirf und implementiere einen typisierten Custom Hook für React mit Effekt-Cleanup, Schutz vor Race Conditions, Beispielkomponente und lauffähigen Tests. Entwickelt für ChatGPT, Claude, Gemini und Microsoft Copilot. Er enthält 4 anpassbare Variablen und lässt sich kostenlos mit einem Klick kopieren.
Fortgeschritten · Code · Redaktionelle Prüfung ausstehend
Prompt
Arbeite als Senior-React-Entwickler, der wiederverwendbare, sauber typisierte Custom Hooks schreibt.
Kontext:
- Aufgabe des Hooks: {{zweck_hook}}
- Datenquelle oder API-Vertrag: {{datenvertrag}}
- Stack: {{stack}}
- Test-Setup: {{tests}}
Bevor du Code schreibst, frag nach allem Wesentlichen, das fehlt (genaue Antwortstruktur, Fehlerformat, ob der Hook auch auf dem Server läuft).
Liefere:
1. Die öffentliche API des Hooks: Name (beginnend mit „use“), Parameter, Rückgabewert und warum diese Form (Objekt oder Tupel).
2. Die vollständige Implementierung in TypeScript mit expliziten Typen und ohne `any`.
3. Saubere Behandlung von: Cleanup beim Unmount, Race Conditions zwischen Requests (AbortController oder Ignore-Flag), stabilen Callbacks (useCallback/useRef nur, wo es wirklich zählt) sowie Lade-, Fehler- und Leerzuständen.
4. Eine kurze Beispielkomponente, die den Hook nutzt.
5. Tests mit {{tests}} für den Normalfall, einen Fehler, eine veraltete Antwort, die zu spät ankommt, und den Unmount während eines Requests (mit Fake-Timern bei Debounce). Bei „keine Tests“ liste die Fälle auf, die ich manuell prüfen sollte.
6. Grenzen: was der Hook nicht abdeckt (Caching, Retries, SSR) und wann eine Bibliothek wie TanStack Query die bessere Wahl ist.
Vorgaben:
- Halte die Rules of Hooks ein und nutze useEffect nicht, um State abzuleiten, der sich beim Rendern berechnen lässt.
- Erfinde keine Endpunkte oder Felder über {{datenvertrag}} hinaus; nutze [AUSFÜLLEN], wo Informationen fehlen.
- Kommentare nur, wenn der Grund nicht offensichtlich ist.
Format: Abschnitte mit Überschriften und ein Codeblock pro Datei mit Dateinamen.So verwenden Sie ihn
- Beschreibe in einem Satz, was der Hook lösen soll, und füge den echten API-Vertrag ein. 2. Beantworte die Rückfragen, bevor der Code entsteht. 3. Übernimm die Dateien, führe die Tests aus und fordere gezielte Änderungen an, falls etwas fehlschlägt.
Anwendungsbeispiel
Zweck: Produkte während der Eingabe suchen, Debounce 300 ms · Vertrag: GET /api/produkte?q= liefert { items, total } · Stack: React 18 + Vite · Tests: Vitest.
Beispielergebnis
Öffentliche API
useProductSearch(query, delay?) gibt ein Objekt { items, total, loading, error } zurück – bei vier Werten lesbarer als ein Tupel.
useProductSearch.ts
import { useEffect, useState } from 'react';
export type Produkt = { id: string; name: string }; // [AUSFÜLLEN: echte Felder]
type Zustand = { items: Produkt[]; total: number; loading: boolean; error: Error | null };
const initial: Zustand = { items: [], total: 0, loading: false, error: null };
export function useProductSearch(query: string, delay = 300): Zustand {
const [zustand, setZustand] = useState<Zustand>(initial);
useEffect(() => {
const q = query.trim();
if (!q) return setZustand(initial);
const controller = new AbortController();
const timer = setTimeout(async () => {
setZustand((s) => ({ ...s, loading: true, error: null }));
try {
const res = await fetch(`/api/produkte?q=${encodeURIComponent(q)}`, { signal: controller.signal });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data: { items: Produkt[]; total: number } = await res.json();
setZustand({ ...data, loading: false, error: null });
} catch (err) {
if (!controller.signal.aborted) setZustand((s) => ({ ...s, loading: false, error: err as Error }));
}
}, delay);
return () => { clearTimeout(timer); controller.abort(); };
}, [query, delay]);
return zustand;
}
Das Cleanup des Effects löscht den Timer und bricht den vorherigen Request ab, sodass eine veraltete Antwort nie die neueste überschreibt …
Wichtige Fakten
- Kategorie
- Programmierung & Entwicklung · React
- Ausgabetyp
- Code
- Niveau
- Fortgeschritten
- Entwickelt für
- ChatGPT, Claude, Gemini und Microsoft Copilot
- Verifiziert in
- Redaktionelle Prüfung ausstehend
- Variablen
- Aufgabe des Hooks, Daten- oder API-Vertrag, Stack und Tests
- Sprache
- Deutsch
- Preis
- Kostenlos, ohne Anmeldung
- Aktualisiert
- 07.11.2026
Häufig gestellte Fragen
Wann lohnt sich ein Custom Hook statt Logik in der Komponente?
Wenn dieselbe zustandsbehaftete Logik in mehreren Komponenten vorkommt oder die Komponente durch das Auslagern deutlich lesbarer und testbarer wird. Für kurze, einmalig genutzte Logik lohnt es sich oft nicht.
Warum legt der Prompt so viel Wert auf Race Conditions?
Sie sind der häufigste Fehler in Hooks, die Daten laden: Eine langsame Antwort einer früheren Suche kann die aktuelle überschreiben. Abbrechen oder Ignorieren veralteter Antworten verhindert das.
Ersetzt das TanStack Query oder SWR?
Nein. Für Caching, Retries oder Invalidierung ist eine bewährte Bibliothek besser. Der Prompt zeigt dir, wann sich der Umstieg lohnt.
Wofür ist dieser Prompt gedacht?
Entwirf und implementiere einen typisierten Custom Hook für React mit Effekt-Cleanup, Schutz vor Race Conditions, Beispielkomponente und lauffähigen Tests.
Mit welchen KI-Tools funktioniert er?
Er ist für ChatGPT, Claude, Gemini und Microsoft Copilot entwickelt. Wir haben ihn in diesen Tools noch nicht überprüft, daher können die Ergebnisse variieren.
Wie passe ich den Prompt an?
Klicken Sie auf „Anpassen“ und füllen Sie die Variablen aus (Aufgabe des Hooks, Daten- oder API-Vertrag, Stack und Tests). Der Text wird sofort aktualisiert und lässt sich anschließend mit einem Klick kopieren. Die Werte werden nur in Ihrem Browser gespeichert.
Brauche ich Erfahrung, um ihn zu verwenden?
Er ist für Fortgeschrittene: Es hilft, das Thema zu kennen, um guten Kontext zu liefern und das Ergebnis kritisch zu prüfen.
Ist dieser Prompt kostenlos?
Ja. Jeder Prompt von HomeCasa Prompts ist kostenlos, ohne Anmeldung und ohne Abonnement. Sie können ihn auch in beruflichen Projekten verwenden.
Kann ich der KI-Ausgabe vertrauen?
Betrachten Sie sie als hochwertigen Entwurf: Prüfen Sie Daten, Zahlen und wichtige Aussagen immer, bevor Sie etwas veröffentlichen oder Entscheidungen treffen.