スキル一覧に戻る
CoderMariusz

react-forms

by CoderMariusz

MonoPilot - Manufacturing and Purchase Order Management System

1🍴 0📅 2026年1月20日
GitHubで見るManusで実行

SKILL.md


name: react-forms description: Apply when building forms with validation, handling form state, or integrating with validation libraries like Zod. version: 1.0.0 tokens: ~700 confidence: high sources:


When to Use

Apply when building forms with validation, handling form state, or integrating with validation libraries like Zod.

Patterns

Pattern 1: React Hook Form Basic

// Source: https://react-hook-form.com/get-started
import { useForm } from 'react-hook-form';

interface FormData {
  email: string;
  password: string;
}

function LoginForm() {
  const { register, handleSubmit, formState: { errors } } = useForm<FormData>();

  const onSubmit = (data: FormData) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register('email', { required: 'Email required' })} />
      {errors.email && <span>{errors.email.message}</span>}
      <button type="submit">Submit</button>
    </form>
  );
}

Pattern 2: Zod Integration

// Source: https://react-hook-form.com/get-started#SchemaValidation
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { z } from 'zod';

const schema = z.object({
  email: z.string().email('Invalid email'),
  password: z.string().min(8, 'Min 8 characters'),
});

type FormData = z.infer<typeof schema>;

function Form() {
  const { register, handleSubmit, formState: { errors } } = useForm<FormData>({
    resolver: zodResolver(schema),
  });
  // ...
}

Pattern 3: Controlled Input with Validation

// Source: https://react.dev/reference/react-dom/components/input
const [value, setValue] = useState('');
const [error, setError] = useState('');

const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
  const newValue = e.target.value;
  setValue(newValue);
  setError(newValue.length < 3 ? 'Min 3 chars' : '');
};

return (
  <>
    <input value={value} onChange={handleChange} />
    {error && <span className="error">{error}</span>}
  </>
);

Pattern 4: Field Array (Dynamic Fields)

// Source: https://react-hook-form.com/docs/usefieldarray
import { useFieldArray, useForm } from 'react-hook-form';

function DynamicForm() {
  const { control, register } = useForm({
    defaultValues: { items: [{ name: '' }] },
  });
  const { fields, append, remove } = useFieldArray({ control, name: 'items' });

  return (
    <>
      {fields.map((field, index) => (
        <div key={field.id}>
          <input {...register(`items.${index}.name`)} />
          <button onClick={() => remove(index)}>Remove</button>
        </div>
      ))}
      <button onClick={() => append({ name: '' })}>Add</button>
    </>
  );
}

Anti-Patterns

  • Controlled inputs without need - Use uncontrolled (register) for performance
  • Validation on every keystroke - Use mode: 'onBlur' or onSubmit
  • No error states shown - Always display validation feedback
  • Missing form reset - Call reset() after successful submit

Verification Checklist

  • Form has proper validation schema (Zod preferred)
  • Error messages displayed near inputs
  • Submit button disabled during loading
  • Form resets or redirects after success
  • Accessible: labels, aria-invalid, focus management

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です