点击任何按钮都会触发Formik中的handleSubmit函数
P粉041881924
P粉041881924 2023-09-10 23:47:25
[React讨论组]

我想在使用formik订餐项目中实现一个用于验证有效性的检查表单,但是我遇到了创建两个按钮的问题。无论点击哪个按钮,都会调用handleSubmit。我该如何解决这个问题?

函数goBack只是将状态设置为false。

export default function Checkout(props) {
  function handleSubmit(event) {
    // event.preventDefault();
    console.log("Hello");
  }

  return (
      
        {(props) => (
          
Back Confirm
)}
); }
export default function CloseButton(props) {
  return ;
}
export default function OrderButton(props) {
  return 
}

我希望CloseButton关闭表单并返回到订单列表,但它只调用由Formik组件创建的handleSubmit,而不是props中的函数。我阅读了文档,但关于使用两个按钮创建formik的内容以及与我的问题相关的内容都没有提到。

P粉041881924
P粉041881924

全部回复(1)
P粉662361740

看起来在 props.goBack 中,你想引用组件的 props,但实际上使用的是 Formik 内部的 props(因为它是最近的 props 声明)。由于 Formik 的 props 上没有定义 goBack,所以你将 undefined 作为 onClick 处理程序传递给按钮。

解决这个问题最直接的方法是重命名其中一个 props 变量,我建议将 Formik 的 props 命名为 formikProps 或类似的名称。

在我看来,更好的方法是解构 props(在这两种情况下,虽然只有一种是必要的),像这样:

export default function Checkout({ goBack }) {
  // ...
  return (
    <Formik>
      {(props) => (
        // ...
        <CloseButton type="button" onClick={goBack}>Back</CloseButton>
        // ...
      )}
    </Formik>
  )
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号