Communitygithub.com

sakilanwar12/nextjs-typescript-skills

Verwende dies beim Erstellen von Formularen mit react-hook-form und zod – schema-zuerst Validierung, typisierte Felder, Server-Action-Submit, barrierefreie Fehler und Datei-Eingaben.

Was ist nextjs-typescript-skills?

Dieses Skill bietet eine strukturierte Vorlage und klare Regeln für die Erstellung von Formularen in Next.js mit react-hook-form und zod. Es setzt auf einen schema-first-Ansatz (zod) zur Validierung, der als Single Source of Truth sowohl client- als auch serverseitig genutzt wird. Die Integration erfolgt über den `zodResolver` von `@hookform/resolvers/zod`, wobei der Modus `onTouched` für eine gute Benutzererfahrung sorgt und die Validierung serverseitig in der Action wiederholt wird. Das Skill betont Barrierefreiheit: Eingabefelder erhalten `aria-invalid` und `aria-describedby`, Fehlermeldungen werden mit `role="alert"` ausgezeichnet, und Labels sind mit `htmlFor` verknüpft. Der Submit erfolgt über eine Server Action, die sowohl einen ausstehenden Zustand (isSubmitting) als auch serverseitige Fehler anzeigt. Eine Checkliste hilft, die Einhaltung aller Regeln zu überprüfen. Dieses Skill eignet sich für Entwickler, die moderne, typsichere und barrierefreie Formulare in Next.js-Projekten mit react-hook-form und zod umsetzen möchten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sakilanwar12/nextjs-typescript-skills/tree/HEAD/skills/nextjs-forms

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Formulare (react-hook-form + zod)

Regeln

  1. Schema zuerst: zod-Schema definieren, Typ mittels z.infer ableiten. Einzige Quelle der Wahrheit, die Client + Server gemeinsam nutzen.
  2. @hookform/resolvers/zod (zodResolver) verwenden. Modus onTouched für UX; auf dem Server im Action erneut validieren.
  3. Formular typisieren: useForm<FormValues>. Keine any-Feldwerte.
  4. Barrierefreie Fehler: aria-invalid, aria-describedby, role="alert" bei Meldungen. <label htmlFor> assoziieren.
  5. Submit über Server Action (formAction oder Action, die die Serverfunktion aufruft). Ausstehende + Server-Fehlerzustände anzeigen.

Muster

'use client';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { z } from 'zod';

const Schema = z.object({
  email: z.string().email('Geben Sie eine gültige E-Mail-Adresse ein'),
  password: z.string().min(8, 'Mindestens 8 Zeichen'),
});
type Values = z.infer<typeof Schema>;

export function LoginForm({ onSubmit }: { onSubmit: (v: Values) => Promise<{ ok: boolean; error?: string }> }) {
  const { register, handleSubmit, formState: { errors, isSubmitting }, setError } = useForm<Values>({
    resolver: zodResolver(Schema),
    mode: 'onTouched',
  });

  return (
    <form onSubmit={handleSubmit(async (v) => {
      const r = await onSubmit(v);
      if (!r.ok) setError('root', { message: r.error ?? 'Fehlgeschlagen' });
    })}>
      <label htmlFor="email">E-Mail</label>
      <input id="email" type="email" autoComplete="email"
        aria-invalid={!!errors.email} aria-describedby={errors.email ? 'email-err' : undefined}
        {...register('email')} />
      {errors.email && <p id="email-err" role="alert">{errors.email.message}</p>}

      <label htmlFor="password">Passwort</label>
      <input id="password" type="password" autoComplete="current-password" {...register('password')} />
      {errors.password && <p role="alert">{errors.password.message}</p>}

      {errors.root && <p role="alert">{errors.root.message}</p>}
      <button disabled={isSubmitting}>{isSubmitting ? 'Anmelden…' : 'Anmelden'}</button>
    </form>
  );
}

Checkliste

  • zod-Schema + z.infer-Typ vorhanden?
  • zodResolver angebunden?
  • Labels + aria-Attribute an jedem Feld?
  • Server validiert das gleiche Schema erneut?
  • Ausstehender deaktivierter Zustand + Root-/Serverfehler angezeigt?

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Verwandte Skills