为何MUI Button组件的form属性无法像原生HTML button一样生效?
问题根源
原生<button>默认type为submit,而MUI的<Button>组件默认type是button——这就是核心差异:即使给MUI Button加上form属性,它也不会触发表单提交逻辑,因为默认类型不是提交按钮。
方案一:匹配原生button的属性配置
直接给MUI Button显式设置type="submit"和form属性,和原生button保持一致的行为逻辑:
<form onSubmit={methods.handleSubmit(onSubmit)} id="sequenceForm"> <label htmlFor="startDate">Start Date</label> <DatePickers name="startDate" id="startDate" /> </form> <Button type="submit" form="sequenceForm" onClick={() => { setDialogOpen(false); }} > Save </Button>
配置完成后,MUI Button会和原生button一样,点击时触发指定ID表单的提交流程。
方案二:手动调用React Hook Form提交方法
如果不想依赖原生DOM的form属性,也可以直接通过React Hook Form提供的实例方法手动触发提交,更贴合React的开发模式:
<form onSubmit={methods.handleSubmit(onSubmit)} id="sequenceForm"> <label htmlFor="startDate">Start Date</label> <DatePickers name="startDate" id="startDate" /> </form> <Button onClick={() => { // 手动触发表单提交 methods.handleSubmit(onSubmit)(); setDialogOpen(false); }} > Save </Button>
这种方式不需要依赖表单ID,直接通过React Hook Form的API完成提交,避开了原生DOM属性的限制。
内容的提问来源于stack exchange,提问作者santhosh
相关产品推荐
相关产品推荐

