ΠΡΠΈΠ²Π΅Ρ Π²ΡΠ΅ΠΌ, ΠΊΡΠΎ Π·Π°ΡΠ΅Π» Π½Π° ΠΌΠΎΠΉ Π±Π»ΠΎΠ³, Ρ ΠΎΡΠ΅Π½Ρ ΡΠ΅Π½Ρ ΡΡΠΎ ΠΈ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΠΌΠΎΠ³Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΎΡΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ.πππ
Π― Π½Π΅ Ρ ΠΎΡΡ ΠΏΠΈΡΠ°ΡΡ Π΄Π»ΠΈΠ½Π½ΡΠΉ Π±Π»ΠΎΠ³, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΡΡΠ·ΠΈΠΌΡΡ Π² ΠΊΠΎΠ΄. π¨π» π©π»
Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ jsx-ΠΊΠΎΠ΄:
<div
className="login grid place-content-center
bg-gradient-to-r from-purple-900 via-purple-1000 to-blue-800 "
>
<form
className="card grid place-content-center h-96 w-96
"
onSubmit={handleSubmit}
>
<label htmlFor="">name:</label>
<input
type="text"
value={name}
placeholder="Enter Your Name"
onChange={(e) => setName(e.target.value)}
/>
{errors.name}
<label htmlFor="email">Email:</label>
<input
type="email"
placeholder="email address"
id="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
{errors.email}
<label htmlFor="password">Password:</label>
<input
type="text"
placeholder="password"
value={password}
id="password"
onChange={(e) => setPassword(e.target.value)}
/>
{errors.password}
<label htmlFor="phoneNumber">phone Number:</label>
<input
type="text"
value={phoneNumber}
placeholder="phone Number"
id="phoneNumber"
onChange={(e) => setPhoneNumber(e.target.value)}
/>
<div className="buttons flex gap-3 justify-center mt-5">
<button type="submit" className="btn-1">
Sign Up
</button>
<button>
<Link
className="
"
to="/login"
>
Login{" "}
</Link>
</button>
</div>
</form>
</div>
2- ΠΡΠΎΡΠΎΠ΅ ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΡ ΡΠΎΡΠΌΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ:
Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΠΊΡΡΡΠΊΠΈ UseState, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ
const [email, setEmail] = useState("")
const [password, setPassword] = useState("")
const [name, setName] = useState("")
const [phoneNumber, setPhoneNumber] = useState("")
const [errors, setErrors] = useState({})
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΡΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ
const handleSubmit = (e) => {
e.preventDefault()
formValidation()
setUsers([...users, { email: email, password: password }])
}
ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π΄Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π΅ΡΡΡΠ°
const formValidation = () => {
let newErrors = {}
if (name === "") {
newErrors.name = <h1 className="text-red-800 text-center">
Name Can't Be Blanck</h1>
}
if (email === "") {span
newErrors.email = <span className="text-red-800 text-center">
Email Address Is Required</span>
} else if (/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/.test(email)) {
newErrors.email = <span className="text-red-800 text-center">
Email address is invalid</span>
} else {
newErrors.email = <h1 className="text-green-800 text-center ">
Email is Valid</h1>
}
if (password === "") {
newErrors.password = <span className="text-red-800 text-center">
Password Is Required</span>
} else if (!/^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,15}$/.test(password)) {
newErrors.password = <span className="text-red-800 text-center">
Invalid Password Format</span>
} else {
newErrors.password = <span className="text-green-800 text-center ">
Correct Password</span>
}
setErrors(newErrors)
}
> Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π³ — ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² localstorage ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
const [users, setUsers] = useState(() => {
const data = localStorage.getItem("data")
return data ? JSON.parse(data) : []
})
Π ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ UseHooks, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, Π½Π΅Ρ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² localstorage, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ.
useEffect(() => {
localStorage.setItem("data", JSON.stringify(users))
}, [users])
π ΠΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΌΠΎΠΉ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π½Π° github
> ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅:
Π ΠΈΡΠΎΠ³Π΅, Ρ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΎΡΠΌΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π½Π°ΡΡΠΈΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΡΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈΡ Π² localstorage. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Ρ ΡΠΌΠΎΠ³ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ, ΠΈ ΡΠ΄Π°ΡΠΈ Π²ΡΠ΅Π³Π΄Π°