reactjs - 如何在下面附加验证错误消息在反应?
问题描述
我正在尝试验证姓名和年龄的输入。两者都不能为空且年龄应超过 0。 https://codesandbox.io/s/agitated-microservice-g5lys?file=/src/App.js
我尝试了两种方法。
解决方案 1:在错误消息处添加验证。问题:在用户输入之前的初始加载中,错误消息已经显示。
{!enteredName ? <span> error msg: Please enter your first name</span> : null}
解决方案 2:在 onsubmit 处理函数中添加验证。问题:不确定如何附加错误消息。
if (enteredName.trim().length === 0 || enteredAge.trim().length === 0) {
return;
}
if (enteredAge < 0) {
return;
}
附加问题:如果我将解决方案 2 验证融合到解决方案 1,它会太长。如何将其包装在单独的函数中并将其附加到解决方案 1?
这是整个代码,包括两次尝试。
import { useState } from "react";
function App() {
const [enteredName, setEnteredName] = useState("");
const [enteredAge, setEnteredAge] = useState("");
const [submittedUsers, setSubmittedUsers] = useState([]);
const nameChangeHandler = (event) => {
setEnteredName(event.target.value);
};
const ageChangeHandler = (event) => {
setEnteredAge(event.target.value);
};
const submittedHandler = (event) => {
event.preventDefault();
// Solution 1
//validate if input is empty? validate age above 0?
if (enteredName.trim().length === 0 || enteredAge.trim().length === 0) {
return null;
}
if (enteredAge < 0) {
return null;
}
// lift up state
setSubmittedUsers([
...submittedUsers,
{
name: enteredName,
age: enteredAge,
id: Math.random().toString()
},
]);
console.log(submittedUsers);
setEnteredName("");
setEnteredAge("");
};
return (
<div className="App">
<header className="App-header">
<h3>
<ul>
<li>Display user input </li>
<li>Validate user input</li>
</ul>
</h3>
<form onSubmit={submittedHandler}>
<input
placeholder="your name"
value={enteredName}
type="text"
onChange={nameChangeHandler}
/>
<br />
{/* Solution 2 */}
{!enteredName ? <span>error msg: Please enter your first name</span> : null}
<br />
<br />
<input
placeholder="your age (number > 0)"
type="number"
value={enteredAge}
onChange={ageChangeHandler}
/>
<br />
{!enteredAge ? <span> error msg: Please enter a valid age</span> : null}
<br />
<button>Submit</button>
<h3>
User input:
<ul>
{submittedUsers.map((u) => (
<li key={u.id}>
{u.name} ({u.age} years old)
</li>
))}
</ul>
</h3>
</form>
</header>
</div>
);
}
export default App;
解决方案
您可以有一个仅在错误发生时显示的默认错误,这意味着当您验证输入时,如果输入不正确,您将 errorValue 设置为 true。
像这样:
首先声明错误值
const [error, setError] = useState(false);
然后调整您的验证过程:
const submittedHandler = (event) => {
event.preventDefault();
// Solution 1
//validate if input is empty? validate age above 0?
if (enteredName.trim().length === 0 || enteredAge.trim().length === 0) {
SetError(true)
return null;
}
然后仅当值设置为 true 时才会有条件地显示错误:
{error &&
<span className='error'>Your error message here</span>}
请注意,如果您希望您的姓名至少有 5 个字符长或任何其他先决条件,您可以使条件发生变化。
推荐阅读
- statistics - 用R计算与边界的距离
- python - 将张量转换为 keras 中的 numpy 数组
- django - 如何以 django 形式生成动态错误消息
- python - 无法将特征连接到相同的形状
- sql - SqlBeautifier:如何更改 super+k super+f 键绑定?
- woocommerce - 为什么 wc_get_template_part() 在 wc_get_products() 中不起作用?
- xamarin - 如何在xamarin的collectionview中绑定嵌套列表项
- html - 如何使我的收音机、复选框和文本区域输入响应?
- javascript - 在 Todo 应用 Redux 中创建删除函数时出错:TypeError: state.byIds.filter 不是函数
- javascript - 尝试将canvacord部署到herkou时出错