reactjs - 提交按钮是刷新页面而不是提交表单?(ReactJS 和 react-toastify)
问题描述
正如标题所说,我有两个具有完全相同格式的按钮,但是一个在单击时刷新页面而不是提交表单。我只需要它来触发敬酒。
这是工作按钮:
<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>
唯一的区别是第一个包含在链接标签中以提交搜索,而另一个将提交电子邮件以订阅新闻通讯,但它现在应该只是触发祝酒词。
帮助?
另外,我已经尝试过 event.preventDefault (没有用),并且两者的表单格式也完全相同。
解决方案
不要混合按钮type="submit"
和处理程序,onClick
因为这将提交关联的表单并采取任何默认的表单提交操作。
另外,我已经尝试过
event.preventDefault
(没有用),并且两者的格式也完全相同。
这不起作用,因为您的onSubmit
回调没有收到事件对象。
将类型更改为“按钮”并使用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
处理程序从按钮移动到表单
<form onSubmit={onSubmit} ...>
...
<button
type="submit"
className="btn btn-primary my-2 my-sm-0"
style={{ marginTop: "10px" }}
>
<i className="fas fa-search"></i>
</button>
...
</form>
您还需要以onSubmit
它也消耗事件的方式将 附加到任一元素,以便您可以event.preventDefault()
使用它。
任何一个
onSubmit={e => onSubmit(e)}
onClick={e => onSubmit(e)}
或者
onSubmit={onSubmit}
onClick={onSubmit}
记住要真正打电话event.preventDefault()
const onSubmit = e => {
e.preventDefault();
...
}
如果由于链接包装还有其他问题,那么您还可以event.stopPropgation()
在处理程序中调用以防止事件在 DOM 中冒泡(在这种情况下为 virtualDOM,因为 react 使用合成事件)。
推荐阅读
- big-o - O(logn) 和 O(nlogn) 之间的区别
- sapui5 - 组合列表关注点击事件-SAP UI5
- r - 尝试确定使用“rtweet”的大型 Twitter API 查询是否仍在实际下载
- magma - 为什么 Magma 2.5 不可编译?
- c++ - 显式重载没有运气
- javascript - 如何从一个数组中选择对象成为单独数组中的对象
- python - pytest-mocks 并声明一个类级别的夹具
- vector - 当我不使用运算符时,如何修复 Octave 中的不一致参数错误?
- java - Java 小程序不能在 AdoptOpenJDK 中运行
- c - 如何使用 sscanf 读取一行带有 continue 逗号的 csv