React Hook Form

Anh-Thi Dinh
draft
⚠️
This is a quick & dirty draft, for me only!
References
  • Nên dùng với zod để quản lý validation, nó cũng cho phép tạo schema xong rùi generate type dựa trên schema này. Shadcn dùng nó mặc định.
Decorate input border when there is error (with shadcn’s form)
Để decorate của Slot bên trong FormControl có tác dụng lên Input thì phải để Input ngay trong FormControl
1// form.tsx
2<Slot
3  // other properties
4  className={cn(error && 'border-destructive')}
5/>
1<FormControl>
2  <Input /> // make sure Input is a direct child of FormControl
3</FormControl>
Nested Form Array nhưng index không update UI đúng như code
Nếu dùng console.log thì update đúng, còn trong UI thì lại không update đúng. Ví dụ remove clicked thì cái index cuối luôn bị remove (UI) thay vì ngay cái index clicked.
Lỗi tại key={}
1const { fields: nestedFields } = useFieldArray({ control, name })
2
3// later in the codes
4{nestedFields.map((nestedItem, nestedIndex) => (
5	<NestedItem key={nestedItem.id} /> // should be .id 	
6))}
Custom validator (1 field based on another filed, with zod) ← also customize path of errors
Nếu như form không tự update mà chỉ sau khi submit mới validate (dùng với shadcn chẳng hạn)
Check xem có thêm {...field} vào trong form chưa.
1<FormControl>
2  <Input placeholder="shadcn" {...field} />
3</FormControl>
Nên để {...field} đầu, trước
zod với react-hook-form: disable 1 control tuỳ thuộc vào 1 control khác (nếu active is true thì ko validate 1 control, ngược lại thì validate nó)
Check code in file options-wrapper.tsx của dự án rewrite.