-
Hook useForm()
import { useForm } from 'react-hook-form'
- react-hook-form 提供的一個(gè) hook,創(chuàng)建一個(gè)表單對(duì)象用來管理表單狀態(tài)和校驗(yàn)
- 自動(dòng)管理輸入框的值、錯(cuò)誤提示、提交狀態(tài)等,而不用自己寫一堆
useState()
-
drizzle-zod
- 在當(dāng)前項(xiàng)目中我們使用 Drizzle ORM 定義了數(shù)據(jù)庫表結(jié)構(gòu),在創(chuàng)建tRPC路由時(shí)用 Zod 生成校驗(yàn)邏輯
- drizzle-zod 可以通過 Zod 插件將表結(jié)構(gòu)映射成對(duì)應(yīng)的驗(yàn)證規(guī)則,用于校驗(yàn)數(shù)據(jù),避免手寫驗(yàn)證邏輯;Drizzle表定義 => Zod schema
- 執(zhí)行
bun add drizzle-zod 安裝,當(dāng)前版本:"drizzle-zod": "^0.8.3"、"zod": "^4.0.16"
import {
createInsertSchema, // 插入時(shí)的Zod schema
createUpdateSchema, // 更新時(shí)的Zod schema
createSelectSchema, // 查詢結(jié)果的Zod schema
} from 'drizzle-zod'
export const videos = pgTable("videos", { ... })
export const videosInsertSchema = createInsertSchema(videos) // 表單提交 / tRPC mutation 時(shí)驗(yàn)證
export const videosUpdateSchema = createUpdateSchema(videos) // 表單編輯 / tRPC update mutation 時(shí)驗(yàn)證
export const videosSelectSchema = createSelectSchema(videos) // 類型推導(dǎo) / API 返回?cái)?shù)據(jù)的驗(yàn)證
-
表單驗(yàn)證數(shù)據(jù)與填充數(shù)據(jù)
import { videosUpdateSchema } from '@/db/schema';
const [video] = trpc.studio.getOne.useSuspenseQuery({ id: videoId })
const formObject = useForm<z.infer<typeof videosUpdateSchema>>({
resolver: zodResolver(videosUpdateSchema),
defaultValues: video
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。