javascript - 如何在 React 上处理没有 AJAX 调用的常规表单?
问题描述
我正在尝试访问一个https://api.com/signup.ashx
与 CORS 有问题的端点。所以我被要求在没有 axios 或 fetch 或类似的东西的情况下进行 API 调用。
所以我这样做了:
const handleSubmit = async (event) => {
let error = false
let message = ""
Object.keys(value).forEach((element) => {
let val = value[element]
if (!val) {
error = true
message = "Please complete all required fields."
}
if (element == "email" && val && !validateEmail(val)) {
error = true
message = "Please enter valid email address"
}
})
if (error) {
alert(message)
} else {
try {
console.log("succesful response")
} catch (error) {
console.log("error", error)
}
}
event.preventDefault()
}
return (
<form
id="signup"
name="signup"
method="post"
autocomplete="off"
onsubmit={handleSubmit}
action="https://api.com/signup.ashx"
>...</form>
)
我们不关心页面是否重新加载。问题是它重新加载并将用户带到错误路线:
locahost:8000/?result=error
这让我认为对端点的调用不起作用。
关于 CORS 的情况,这不取决于我。我只是被要求按照我提到的那样去做。
那么你知道我的代码有什么问题吗?
解决方案
react中的导航由路由器控制。您必须使用路由器而不是表单的操作。提交表单时参考React Router v4 Redirecting
也event.preventDefault
应该是提交函数中的第一条语句。
推荐阅读
- c++ - 无法检测 T::value() 使用 auto 参数化 true_type
- ios - aws Rekognition 未在 iOS 上初始化
- c# - 如何使用泛型将两个函数组合成一个函数?
- python - 获取 zip 文件的详细信息 - 而不是从其内容中获取
- python - 在python中检查两个字符是否相等
- reactjs - firebase中的多条记录,在回调函数中重用之前生成的id
- asp.net - 将所有 CheckBoxList 数据插入数据库
- r - 将 .R 文件批量转换为 .txt 文件
- javascript - 如何用英镑符号(货币)替换问号
- javascript - 当使用 json dict 填充数据表时,在 Jquery 中未检测到 Html 类标记