You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shadcn Form报错:无法解构useFormContext的getFieldState属性

解决Shadcn Form组件的useFormContext为空错误

这个错误的核心原因是你在Shadcn的<Form>组件内部嵌套了原生<form>标签,破坏了react-hook-form的上下文传递,导致FormMessage等组件无法获取到表单上下文。

修复步骤:

  • 移除内部的原生<form>标签
  • 将表单提交逻辑直接绑定到Shadcn的<Form>组件上

修改后的完整代码:

const formSchema = z.object({
  username: z.string(),
})

const form = useForm<z.infer<typeof formSchema>>({
  resolver: zodResolver(formSchema),
  defaultValues: {
    username: "",
  },
});

// 表单结构
<Form {...form} onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
  <FormField
    control={form.control}
    name="username"
    render={({ field }) => (
      <FormItem>
        <FormLabel>User Name</FormLabel>
        <FormControl>
          <Input {...field} />
        </FormControl>
        <FormMessage />
      </FormItem>
    )}
  />
  <Button type="submit">Submit</Button>
</Form>

补充说明:

Shadcn的<Form>组件已经封装了react-hook-form的FormProvider和原生form元素的功能,不需要额外嵌套原生form。所有依赖表单上下文的组件(如FormField、FormMessage)必须直接放在Shadcn <Form>的内部,才能正确获取上下文。

内容的提问来源于stack exchange,提问作者Jasperan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:02:12