Transform + ctx.addIssue()
Pure Zod approach - no external package

When to use this approach:

  • Only 1 small form in project
  • Want zero dependencies
  • Okay with verbose schema

Use @zod-utils/react-hook-form instead when:

  • Multiple forms (2+)
  • Discriminated unions
  • Want clean schemas: z.string().min(1)
  • Want getSchemaDefaults() helper
  • Better DX matters more than zero deps

useWatch values:

name: null (type: string | null | undefined)

email: null

age: null

Address *

Schema verbosity comparison:

This approach:

name: z.string().nullish()
  .transform((val, ctx) => {
    if (!val) {
      ctx.addIssue({...});
      return '';
    }
    return val;
  })

Package approach:

name: z.string().min(1)