Forms وإدارة النماذج — مقدمة React
Forms في React
Controlled Components
function LoginForm() {
const [formData, setFormData] = useState({
email: '',
password: ''
});
const [errors, setErrors] = useState({});
const handleChange = (e) => {
const { name, value } = e.target;
setFormData(prev => ({
...prev,
[name]: value
}));
};
const validate = () => {
const newErrors = {};
if (!formData.email) {
newErrors.email = 'البريد الإلكتروني مطلوب';
} else if (!/\S+@\S+\.\S+/.test(formData.email)) {
newErrors.email = 'البريد غير صالح';
}
if (!formData.password) {
newErrors.password = 'كلمة المرور مطلوبة';
} else if (formData.password.length < 6) {
newErrors.password = 'كلمة المرور قصيرة جداً';
}
return newErrors;
};
const handleSubmit = (e) => {
e.preventDefault();
const validationErrors = validate();
if (Object.keys(validationErrors).length > 0) {
setErrors(validationErrors);
} else {
// إرسال البيانات
console.log('Submitting:', formData);
}
};
return (
<form onSubmit={handleSubmit}>
<div>
<input
type="email"
name="email"
value={formData.email}
onChange={handleChange}
placeholder="البريد الإلكتروني"
/>
{errors.email && <span className="error">{errors.email}</span>}
</div>
<div>
<input
type="password"
name="password"
value={formData.password}
onChange={handleChange}
placeholder="كلمة المرور"
/>
{errors.password && <span className="error">{errors.password}</span>}
</div>
<button type="submit">تسجيل الدخول</button>
</form>
);
}
useReducer للنماذج المعقدة
const formReducer = (state, action) => {
switch (action.type) {
case 'UPDATE_FIELD':
return { ...state, [action.field]: action.value };
case 'SET_ERRORS':
return { ...state, errors: action.errors };
case 'RESET':
return initialState;
default:
return state;
}
};
function ComplexForm() {
const [state, dispatch] = useReducer(formReducer, initialState);
const updateField = (field, value) => {
dispatch({ type: 'UPDATE_FIELD', field, value });
};
// ...
}
function RegistrationForm() {
const [formData, setFormData] = useState({
name: '',
email: '',
password: '',
confirmPassword: '',
agreeToTerms: false
});
const handleChange = (e) => {
const { name, value, type, checked } = e.target;
setFormData(prev => ({
...prev,
[name]: type === 'checkbox' ? checked : value
}));
};
const handleSubmit = (e) => {
e.preventDefault();
console.log('بيانات التسجيل:', formData);
};
return (
<form onSubmit={handleSubmit}>
<input name="name" value={formData.name} onChange={handleChange} placeholder="الاسم" />
<input name="email" value={formData.email} onChange={handleChange} placeholder="البريد" />
<input type="password" name="password" value={formData.password} onChange={handleChange} placeholder="كلمة المرور" />
<input type="password" name="confirmPassword" value={formData.confirmPassword} onChange={handleChange} placeholder="تأكيد كلمة المرور" />
<label>
<input type="checkbox" name="agreeToTerms" checked={formData.agreeToTerms} onChange={handleChange} />
أوافق على الشروط
</label>
<button type="submit">تسجيل</button>
</form>
);
}
اختبر فهمك