382 字
2 分钟
前端小练习

用了react的useState钩子,不过总感觉有很多赘余的部分,比如四个输入框的信息分别维护,而不是统一由一个四个元素组成的变量控制。

接下来可以尝试做一个贪吃蛇。

(已经失败了。。)

主要代码如下:

import { useState } from "react";
import "./App.css";
const InputItem = ({ handleInput, title, placeholder, error, isError }) => {
return (
<>
<p className="entry-name">{title}</p>
<input
className="input"
type="text"
placeholder={placeholder}
onBlur={(e) => {
handleInput(e.target.value, title);
}}
/>
<p className="error">{isError && error}</p>
</>
);
};
export default function App() {
const [username, setUsername] = useState("");
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [confirm, setConfirm] = useState("");
const [usernameError, setUsernameError] = useState(false);
const [emailError, setEmailError] = useState(false);
const [passwordError, setPasswordError] = useState(false);
const [confirmError, setConfirmError] = useState(false);
const handleInput = (value, title) => {
if (title === "Username") {
if (value && value.length >= 3) {
setUsernameError(false);
setUsername(value);
} else setUsernameError(true);
} else if (title === "Email") {
const emailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
if (value && emailReg.test(value)) {
setEmailError(false);
setEmail(value);
} else setEmailError(true);
} else if (title === "Password") {
if (value && value.length >= 6) {
setPasswordError(false);
setPassword(value);
} else setPasswordError(true);
} else {
if (value && value === password) setConfirmError(false);
else {
setConfirmError(true);
setConfirm(true);
}
}
};
const handleClick = () => {
if (username === "") setUsernameError(true);
if (email === "") setEmailError(true);
if (password === "") setPasswordError(true);
if (confirm === "") setConfirmError(true);
if (
username !== "" &&
!usernameError &&
!emailError &&
!passwordError &&
!confirmError
) {
alert("Register succeeded.");
}
};
return (
<div className="App">
<h2 className="title">Register With Us</h2>
<InputItem
handleInput={handleInput}
title="Username"
placeholder="Enter username"
isError={usernameError}
error="Username must be at least 3 characters"
/>
<InputItem
handleInput={handleInput}
title="Email"
placeholder="Enter email"
isError={emailError}
error="Email is not valid"
/>
<InputItem
handleInput={handleInput}
title="Password"
placeholder="Enter password"
isError={passwordError}
error="Password must be at least 6 characters"
/>
<InputItem
handleInput={handleInput}
title="Confirm Password"
placeholder="Enter password again"
isError={confirmError}
error="Passwords are not the same"
/>
<button className="submit" onClick={handleClick}>
Submit
</button>
</div>
);
}

目前暂时没想好怎么把这四个输入框统一管理起来。

前端小练习
https://lulu010722.com/posts/前端小练习/
作者
LULU
发布于
2023-06-27
许可协议
CC BY-NC-SA 4.0