“提交”按钮正在刷新页面而不是提交表单?(ReactJS和reactoastify)

“提交”按钮正在刷新页面而不是提交表单?(ReactJS和reactoastify),reactjs,button,page-refresh,onsubmit,react-toastify,Reactjs,Button,Page Refresh,Onsubmit,React Toastify,正如标题所说,我有两个格式完全相同的按钮,但其中一个按钮在单击时刷新页面,而不是提交表单。我只需要它来触发一个祝酒词 这是工作按钮: <button type="submit" className="btn btn-primary my-2 my-sm-0" style={{ marginTop: "10px" }} onClick={() => onSubmit()} > <

正如标题所说,我有两个格式完全相同的按钮,但其中一个按钮在单击时刷新页面,而不是提交表单。我只需要它来触发一个祝酒词

这是工作按钮:

<button
    type="submit"
    className="btn btn-primary my-2 my-sm-0"
    style={{ marginTop: "10px" }}
    onClick={() => onSubmit()}
>
  <i className="fas fa-search"></i>
</button>
<button
    type="submit"
    className="btn btn-primary my-2 my-sm-0"
    style={{ marginTop: "10px" }}
    onClick={() => onSubmit()}
>
    <i className="fas fa-paper-plane"></i>
</button>

onSubmit()}
>
这是“不工作”按钮:

<button
    type="submit"
    className="btn btn-primary my-2 my-sm-0"
    style={{ marginTop: "10px" }}
    onClick={() => onSubmit()}
>
  <i className="fas fa-search"></i>
</button>
<button
    type="submit"
    className="btn btn-primary my-2 my-sm-0"
    style={{ marginTop: "10px" }}
    onClick={() => onSubmit()}
>
    <i className="fas fa-paper-plane"></i>
</button>

onSubmit()}
>
唯一的区别是第一个被包装在一个链接标签中以提交搜索,而另一个将提交一封电子邮件以订阅时事通讯,但现在它应该只是触发一个祝酒词

帮助?


另外,我已经尝试了event.preventDefault(不起作用),而且两者的表单格式也完全相同。

不要混合使用按钮
type=“submit”
onClick
处理程序,因为这将提交相关表单并执行任何默认表单提交操作

另外,我已经尝试了
event.preventDefault
(不起作用),而且两者都有 格式也完全相同

这不起作用,因为您的
onSubmit
回调没有接收到事件对象

将类型更改为“button”,并使用
onClick
处理程序进行表单数据提交

<button
    type="button" // <-- button type
    className="btn btn-primary my-2 my-sm-0"
    style={{ marginTop: "10px" }}
    onClick={onSubmit}
>
  <i className="fas fa-search"></i>
</button>
您还需要将
onSubmit
附加到任一元素,使其同时使用事件,这样您就可以对其执行
event.preventDefault()

或者

onSubmit={e => onSubmit(e)}
onClick={e => onSubmit(e)}

记住实际调用
event.preventDefault()


如果由于链接包装还存在其他问题,那么还可以在处理程序中调用
event.stoppropigation()。顺便说一句,它没有包装在链接路由器标签中的是不能正常工作的。但是我尝试了所有可能的解决方案,如果我将类型更改为button并将事件添加到onSubmit,它根本不会提交。如果我将类型保持为submit,并将onSubmit移动到表单标记,也不会提交表单,它只是不做任何事情,甚至控制台中没有错误。@AmberRobertson,嗯,有趣的是,可能还有更多/其他东西干扰了均匀传播。你能提供一个完整的代码示例吗?所以我发现我注释掉了我的toast.configure()行
const onSubmit = e => {
  e.preventDefault();
  ...
}