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

如何在Formik表单中使用<a>标签实现表单提交?

用<a>标签提交Formik表单的可行方案

方案一:通过Formik的render props获取submitForm方法

Formik支持render props模式,你可以直接在组件内部解构出官方提供的submitForm方法,绑定到a标签的点击事件上,同时要阻止a标签的默认跳转行为。修改后的完整代码如下:

<Formik
  onSubmit={async (values) => {
    await new Promise((r) => setTimeout(r, 500));
    alert(JSON.stringify(values, null, 2));
  }}
  initialValues={{
    yourName: "",
    yourEmail: "",
    yourTel: "",
    yourMessage: "",
  }}
>
  {({ submitForm }) => ( // 解构获取Formik内置的submitForm方法
    <Form>
      <Field name="yourName" placeholder="Name" />
      <ErrorMessage name="yourName" component="div" />
      <Field name="yourEmail" placeholder="Email" type="email" />
      <ErrorMessage name="yourEmail" component="div" />
      <Field name="yourTel" placeholder="Phone Number" />
      <ErrorMessage name="yourTel" component="div" />
      <Field name="yourMessage" as="textarea" placeholder="Message..." />
      <ErrorMessage name="yourMessage" component="div" />
      <a href="#" onClick={(e) => {
        e.preventDefault(); // 必须阻止a标签默认跳转,避免页面刷新中断提交流程
        submitForm();
      }}>
        Submit
      </a>
    </Form>
  )}
</Formik>

方案二:把按钮伪装成a标签样式(更简洁)

如果只是需要a标签的视觉效果,没必要硬用a标签。直接用<button type="submit">,再通过CSS改成a标签的样式即可,这样能直接复用Formik默认的提交逻辑:

// 先加CSS样式
<style>
  .submit-as-link {
    background: none;
    border: none;
    color: #0066cc;
    text-decoration: underline;
    cursor: pointer;
    padding: 0;
  }
</style>

// 表单内的提交按钮
<button type="submit" className="submit-as-link">
  Submit
</button>

你之前的方法失效原因

  • <a type='submit'>:type="submit"是表单控件(button、input)专属属性,a标签不支持这个属性,浏览器不会把它识别为表单提交触发器。
  • <a onClick={() => {submitForm()}}>:submitForm是Formik内部方法,必须通过Formik的上下文或render props才能获取,直接全局调用会找不到这个方法。

内容的提问来源于stack exchange,提问作者Tegid Goodman-Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:39:18