javascript - 如何在提交之前验证输入?
问题描述
我想在提交之前验证输入。但是出了点问题,每次 submit() 运行 :((
const [value, setValue] = React.useState("");
const [error, setError] = React.useState("");
const validate = () => {
value.length>5?setError("Some errors"):setError("");
}
const submit = () => {do something...}
...
<input onChange={e => setValue(e.target.value)} />
<Button onClick={() => {
validate();
if(!error.length) submit()
}> Submit </Button>
解决方案
因为该error
变量只会在组件的下一次渲染中包含新值。这是由于方式useState
,或者更确切地说是 Hooks 在一般工作中。
相反,您必须在 validate 函数中返回结果是否有效。
const validate = () => {
value.length>5?setError("Some errors"):setError("");
return value.length <= 5;
}
<Button onClick={() => {
const isValid = validate();
if(isValid) submit()
}> Submit </Button>
推荐阅读
- css - Powr 表单 CSS 自定义(按钮和验证码对齐)
- ddev - 无法清除临时安装目录
- ssl - SSL握手时入口NGINX客户端关闭连接
- node.js - Nodejs Express 车把如何在没有模板的情况下将 .hbs 包含在另一个 .hbs 中
- python - 如何在学习期间中断训练并获得权重?
- excel - 如何获得具有在特定行条件下“重新开始”的动态范围的运行公式?
- python - 使用 numpy 等索引从张量中提取
- c++ - 比较两个 std::strings 以查看它们是否匹配 c++
- powerbi - 如何从 DAX 中的表中获取具有特定条件的另一个表中的记录?
- tomcat - 使用 NIO 连接器部署到 Tomcat 时是否使用 Servlet 3.0 异步冗余?