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> );}目前暂时没想好怎么把这四个输入框统一管理起来。