React JS 多个提交按钮 react-hook-form

Posted

技术标签:

【中文标题】React JS 多个提交按钮 react-hook-form【英文标题】:React JS Multiple submit Buttons react-hook-form 【发布时间】:2021-05-16 11:50:58 【问题描述】:

我使用 react-hook-form 进行表单验证和提交,使用单个提交类型按钮一切正常,现在我需要三个按钮,“保存草稿”、“预览页面中的数据值”和“提交批准”,我可以选择退出模式选择单选按钮,但想要三个按钮提交功能,这需要表单数据。为输入字段添加 onchnage 将起作用,但表单验证需要重新编写。

  const  register, handleSubmit  = useForm();
  const onSubmit = (data) => alert(JSON.stringify(data));
  function NeedTohaveFormDataHere1(Data) 

    function NeedTohaveFormDataHere2(Data) 

   
    return (  <form onSubmit=handleSubmit(onSubmit)>
     <Headers />

  <input name="firstName" ref=register placeholder="First name" />

  <input name="lastName" ref=register placeholder="Last name" />

  <select name="category" ref=register>
    <option value="">Select...</option>
    <option value="A">Category A</option>
    <option value="B">Category B</option>
  </select>
  <button onClick=NeedTohaveFormDataHere1>
   Save Draft
  </button > 
  <button onClick=NeedTohaveFormDataHere2>
    Preview
  </button>  
  <input type="submit" />
</form>
 );
 
 

onSubmit函数会获取表单数据,其他两个按钮函数如何获取表单数据?

喜欢 .. 和

  <button onClick=handleSubmit(NeedTohaveFormDataHere1)>
   Save Draft
  </button > 
  <button onClick=handleSubmit(NeedTohaveFormDataHere2)>
    Preview
  </button> 

【问题讨论】:

这个问题解释力太弱了。请给出正确的代码和解释 添加示例代码 【参考方案1】:

我遇到了同样的问题,我通过以下方式解决了它:

我有两个按钮,第一个底部验证并正常提交表单。第二个按钮仅验证和调用自定义函数。

我假设你有这种情况。一键保存,一键存储草稿。

<form id="example-form" onSubmit=handleSubmit(handleOnSave)>
  <IconButtonTooltip
    form="example-form"
    title="Only save"
  >
    <SaveIcon className=classes.icon />
  </IconButtonTooltip>

  <IconButtonTooltip
    form="example-form"
    title="Save and sign"
    onClick=handleSubmit(handleOnSingAndSave)
  >
    <SignatureIcon className=classes.icon />
  </IconButtonTooltip>
</form>

const handleOnSingAndSave  = () => 
  // Handle things...

它对我有用!

【讨论】:

【参考方案2】:

你可以在多个地方使用handleSubmit。

const handleSubmitDraft=()=>
  handleSubmit(aync(data)=>...)()


const handleSubmitPreview=()=>
  handleSubmit((data)=>...)()



<button onClick=handleSubmitDraft>
   Save Draft
</button > 
<button onClick=handleSubmitPreview>
    Preview
</button> 

【讨论】:

【参考方案3】:

如果您必须处理 react-hook-form 中的多个提交按钮

1.从表单标签中删除您的提交方法并将其添加到您的按钮点击

2.将提交按钮移到表单标签之外

const  handleSubmit  = useForm();

<form>
 <input />
 <input />
</form>

<button onClick=handleSubmit((d) => console.log(d)) > Save </button>
<button onClick=handleSubmit((d) => console.log(d)) > Draft </button>

【讨论】:

你用两个不同的按钮调用同一个方法。【参考方案4】:

您可以尝试为按钮指定名称和类型,然后使用 window.event.submitter.name 捕获它。

    <button type="submit" name="submit">Submit</button> 
    
    <button type="submit" name="draft">Draft</button> 

    <form onSubmit=handleSubmit > ...
    const handleSubmit = () =>  
    const buttonType=window.event.submitter.name // will return draft or submit and you can handle it using switch case.

    if(buttonType==="submit")
    //HANDLE SUBMIT FUNCTION
    return;
    

    if(buttonType==="draft")
     //HANDLE DRAFT FUNC
    return;
    

    

【讨论】:

以上是关于React JS 多个提交按钮 react-hook-form的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular JS 处理表单中的多个提交按钮?

在 React.js 中重新加载页面 onSubmit

react多组表单同事提交怎么分组

js判断循环多个表单问题

没有 `type="submit"` 的提交按钮如何工作

React Hook Form:提交带有嵌套组件的表单或提取嵌套组件的字段提交