تعلم كيفية التحكم بكل حقل من حقول النموذج من خلال حالة React لتتمكن من التحقق من البيانات وإرسالها بشكل موثوق.
افتح هذا الدرس في Kodokonفي React، يصبح النموذج قابلاً للتنبؤ عندما يكون كل حقل متحكماً به: القيمة المعروضة تأتي من حالة المكوّن، وكل ضغطة على المفاتيح تمر عبر onChange لتحديث تلك الحالة. لم يعد الـ DOM هو مصدر الحقيقة، بل حالتك هي المصدر. عملياً، تربط الخاصية value بمتغير حالة وتوفر معالجاً يستدعي دالة التحديث.
import { useState } from "react";
function EmailField() {
const [email, setEmail] = useState("");
return (
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
);
}نادراً ما يحتوي النموذج الحقيقي على حقل واحد فقط. بدلاً من تكديس استدعاءات useState، اجمع القيم في كائن واحد واكتب معالجاً عاماً. يجب أن تطابق الخاصية name لكل حقل مفتاحاً من مفاتيح الكائن تماماً: فهذا ما يخبر المعالج بأي خاصية عليه تحديثها.
const [form, setForm] = useState({
username: "",
password: "",
});
function handleChange(e) {
const { name, value } = e.target;
setForm((prev) => ({ ...prev, [name]: value }));
}يبقى الإرسال. افتراضياً، يعيد المتصفح تحميل الصفحة عند إرسال النموذج: استدعِ e.preventDefault() في أعلى معالج onSubmit لديك. كما أنه المكان المناسب للتحقق من البيانات قبل إرسالها، لأن حالة النموذج بأكملها متوفرة بين يديك بالفعل.
function handleSubmit(e) {
e.preventDefault();
if (form.username.trim() === "") {
alert("Username is required.");
return;
}
console.log("Submitting:", form);
}
return (
<form onSubmit={handleSubmit}>
<input
name="username"
value={form.username}
onChange={handleChange}
/>
<button type="submit">Create account</button>
</form>
);value={email} إلى <input> دون توفير onChange. ماذا يحدث؟e.preventDefault() في معالج onSubmit؟