Diese Richtlinie soll Entwicklern helfen, die besten Praktiken bei der Verwendung von Technologie-Stacks wie Solidity, TypeScript, Node.js, Next.js 14 App Router, React, Vite, Viem v2, Wagmi v2, Shadcn UI, Radix UI und Tailwind Aria zu befolgen.
Die wichtigsten Elemente sind.
- Stil und Struktur des Codes
- Präzise TypeScript-Beispiele mit prägnanten, technischen Antworten bereitstellen
- Funktionale, deklarative Programmierung verwenden und die Verwendung von Klassen vermeiden
- Vorrang von Iteration und Modularität vor doppeltem Code
- Verwenden Sie beschreibende Variablennamen mit Hilfsverben
- Für das Inhaltsverzeichnis Kleinbuchstaben mit Bindestrichen verwenden
- Benannte Exporte werden für Komponenten bevorzugt
- Einführung des RORO-Modells (Receive Object, Return Object)
- JavaScript/TypeScript-Spezifikation
- Reine Funktionen verwenden das Schlüsselwort "function" und lassen das Semikolon weg.
- TypeScript durchgängig verwenden, Schnittstellen über Typen, Enums vermeiden, Mappings verwenden
- Vorgeschlagene Dateistruktur: exportierte Komponenten, Unterkomponenten, Hilfsfunktionen, statischer Inhalt, Typdefinitionen
- Vermeiden Sie unnötige geschweifte Klammern in bedingten Anweisungen, lassen Sie geschweifte Klammern in einzeiligen Anweisungen weg
- Fehlerbehandlung und Validierung
- Die Funktion beginnt mit der Behandlung von Fehlern und Grenzfällen
- Behandlung von Fehlerbedingungen mit vorzeitiger Rückkehr
- Platzieren Sie den normalen Ausführungspfad am Ende der Funktion
- Vermeiden Sie unnötige else-Anweisungen und verwenden Sie das if-return-Muster
- Frühzeitige Behandlung von Vorbedingungen und ungültigen Zuständen durch Schutzklauseln
- Implementierung einer angemessenen Fehlerprotokollierung und benutzerfreundlicher Fehlermeldungen
- Erwägen Sie die Verwendung benutzerdefinierter Fehlertypen oder Fehlerfabriken
- React/Next.js Best Practices
- Funktionskomponenten und TypeScript-Schnittstellen verwenden
- Verwendung von deklarativem JSX
- Komponenten werden mit function und nicht mit const deklariert.
- Komponentenentwicklung und Styling mit Shadcn UI, Radix und Tailwind Aria
- Implementierung von Responsive Design mit Tailwind CSS, ein Mobile-First-Ansatz
- Statische Inhalte und Schnittstellen werden am Ende der Datei platziert
- Minimierung der Verwendung von "use client", "useEffect" und "setState" und Vorrang für die Verwendung von RSCs
- Formularvalidierung mit Zod
- Die Client-Komponente ist in Suspense verpackt, um ein Fallback zu bieten
- Nicht kritische Komponenten werden dynamisch belastet
- Bildoptimierung: Verwendung des WebP-Formats, Bereitstellung von Größenangaben, verzögertes Laden
- Erwartete Fehler in Server-Operationen werden als Rückgabewerte behandelt und mit useActionState verwaltet
- Unerwartete Fehler mit Fehlergrenzen behandeln
- Formularvalidierung mit useActionState in Verbindung mit react-hook-form
- Code im Verzeichnis services/ führt zu benutzerfreundlichen Fehlern
- Verwenden Sie die nächste sichere Aktion für alle Serveraktionen.
- Wichtige Engagements
- Verlassen auf Next.js App Router für Zustandsänderungen
- Priorisierung von Web-Vital-Metriken (LCP, CLS, FID)
- Minimieren Sie die Verwendung des Begriffs "Kunde verwenden":
- Priorisierung von Serverkomponenten und Next.js SSR-Funktionalität
- Verwenden Sie 'use client' nur beim Zugriff auf Web-APIs in Widgets
- Vermeiden Sie die Verwendung von "use client" beim Abrufen von Daten oder bei der Statusverwaltung
Es wird empfohlen, die offizielle Next.js-Dokumentation zu Rate zu ziehen, um sich über die besten Praktiken zum Abrufen, Rendern und Weiterleiten von Daten zu informieren.
Viem v2
Sie sind ein Experte in Solidity, TypeScript, Node.js, Next.js 14 App Router. Reagieren Sie, Vite, Viem v2, Wagmi v2, Shadcn UI, Radix UI, und Tailwind Aria.
Wichtige Grundsätze
- Schreiben Sie prägnante, technische Antworten mit genauen TypeScript-Beispielen.
- Verwenden Sie funktionale, deklarative Programmierung und vermeiden Sie Klassen.
- Ziehen Sie Iteration und Modularisierung der Duplikation vor.
- Verwenden Sie beschreibende Variablennamen mit Hilfsverben (z. B. isLoading).
- Verwenden Sie Kleinbuchstaben mit Bindestrichen für Verzeichnisse (z. B. components/auth-wizard).
- Bevorzugen Sie benannte Exporte für Komponenten.
- Verwenden Sie das Muster "Receive an Object, Return an Object" (RORO).
JavaScript/TypeScript
- Verwenden Sie das Schlüsselwort "function" für reine Funktionen und lassen Sie Semikolons weg.
- Verwenden Sie TypeScript für den gesamten Code. Bevorzugen Sie Schnittstellen gegenüber Typen. Vermeiden Sie Enums, verwenden Sie Maps.
- Dateistruktur: Exportierte Komponente, Unterkomponenten, Hilfskomponenten, statischer Inhalt, Typen.
- Vermeiden Sie unnötige geschweifte Klammern in bedingten Anweisungen.
- Bei einzeiligen Anweisungen in bedingten Anweisungen sollten geschweifte Klammern weggelassen werden.
- Verwenden Sie eine prägnante, einzeilige Syntax für einfache bedingte Anweisungen (z. B. if (condition) doSomething()).
Fehlerbehandlung und Validierung
- Setzen Sie Prioritäten bei der Fehlerbehandlung und bei Randfällen.
- Behandeln Sie Fehler und Randfälle am Anfang von Funktionen.
- Verwenden Sie frühe Rückgaben für Fehlerbedingungen, um tief verschachtelte if-Anweisungen zu vermeiden.
- Platzieren Sie den "Happy Path" am Ende der Funktion, um die Lesbarkeit zu verbessern.
- Vermeiden Sie unnötige else-Anweisungen; verwenden Sie stattdessen if-return-Muster.
- Verwenden Sie Guard-Klauseln, um Vorbedingungen und ungültige Zustände frühzeitig zu behandeln.
- Implementieren Sie eine angemessene Fehlerprotokollierung und benutzerfreundliche Fehlermeldungen.
- Erwägen Sie die Verwendung von benutzerdefinierten Fehlertypen oder Fehlerfabriken für eine konsistente Fehlerbehandlung.
React/Next.js
- Verwenden Sie funktionale Komponenten und TypeScript-Schnittstellen.
- Verwenden Sie deklaratives JSX.
- Verwenden Sie function, nicht const, für Komponenten.
- Verwenden Sie Shadcn UI, Radix und Tailwind Aria für Komponenten und Styling.
- Implementieren Sie responsives Design mit Tailwind CSS.
- Verwenden Sie einen Mobile-First-Ansatz für responsives Design.
- Platzieren Sie statische Inhalte und Schnittstellen am Dateiende.
- Verwenden Sie Inhaltsvariablen für statische Inhalte außerhalb von Renderfunktionen.
- Minimieren Sie 'use client', 'useEffect' und 'setState'. Verwenden Sie Zod für die Formularvalidierung.
- Verwenden Sie Zod für die Validierung von Formularen.
- Umhüllen Sie Client-Komponenten in Suspense mit Fallback.
- Verwenden Sie dynamisches Laden für nicht kritische Komponenten.
- Optimieren Sie Bilder: WebP-Format, Größenangaben, verzögertes Laden.
- Modellieren Sie erwartete Fehler als Rückgabewerte: Vermeiden Sie die Verwendung von try/catch für erwartete Fehler in Server-Aktionen. Verwenden Sie useActionState, um diese Fehler zu verwalten und Verwenden Sie useActionState, um diese Fehler zu verwalten und sie an den Client zurückzugeben.
- Verwenden Sie Fehlergrenzen für unerwartete Fehler: Implementieren Sie Fehlergrenzen mit den Dateien error.tsx und global-error.tsx, um unerwartete Fehler zu behandeln und ein Fallback UI bereitzustellen.
- Verwenden Sie useActionState mit react-hook-form für die Formularvalidierung.
- Code in services/ dir wirft immer benutzerfreundliche Fehler, die tanStackQuery abfangen und dem Benutzer anzeigen kann.
- Verwenden Sie next-safe-action für alle Server-Aktionen.
- Implementieren Sie typsichere Server-Aktionen mit korrekter Validierung.
- Benutzen Sie die Funktion `action` von next-safe-action für die Erstellung von Aktionen.
- Definieren Sie Eingabeschemata mit Zod für eine robuste Typüberprüfung und Validierung.
- Behandeln Sie Fehler anständig und geben Sie angemessene Antworten zurück.
- Verwenden Sie den Importtyp { ActionResponse } von '@/types/actions'.
- Stellen Sie sicher, dass alle Serveraktionen den ActionResponse-Typ zurückgeben.
- Implementieren Sie eine konsistente Fehlerbehandlung und Erfolgsmeldungen mit ActionResponse.
Wichtige Konventionen
1. auf Next.js App Router für Zustandsänderungen vertrauen. 2.
2. priorisieren Sie Web Vitals (LCP, CLS, FID). 3.
3. minimieren Sie die Verwendung von 'use client'.
- Bevorzugen Sie Serverkomponenten und Next.js SSR Funktionen.
- Verwenden Sie 'use client' nur für Web API Zugriff in kleinen Komponenten.
- Vermeiden Sie die Verwendung von 'use client' für Datenabrufe oder Zustandsverwaltung.
Siehe Next.js Dokumentation für Datenabrufe, Rendering und Routing Best Practices.