Moaz Zant نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 (معدل) import React from 'react'; import axios from 'axios' import {useFormik} from 'formik' import React, {usetate} from 'react' import {useNavigate } from 'react-router-dom' import * as yup from 'yup' let {errors, set errors} = usestate ([]) let navigate =usenavigate (); let [statusErrors,setStatusErrors] =usestate('') const schema =yup object ({ name:yup string().required("name is required") .min(3,"min is 3 char") .max("10, max is 0 char"), email:yup string().required("email is required") .email ('not vaild email'), password:yup string().required("password is required") .matches (/^[A-Z][a-z0-9]{4,8}$/), cpassword:yup string().required("confirm password is required") .oneof([yup.ref('password')] 'not match passowrd'), }) export default function Register() { let formik =useformik({ initialvalues:{ email: "", name: "", password: "", cpassword: "", onsubmit:register, }, }) async function register (values) { let {data}=await axios.post ('https://lazy-blue-sockeye-gear.cyclic.app/api/v1/auth/signup', values) console.log(data) ifdata.message=="succuess"} Console.log("registerd"); } return ( <div className="container mt-5 pt-5"> <form className='w-50 m-auto text-center' onsubmit={formik.handlesubmit}> <div className="mb-3"> <label htmlFor="exampleInputEmail1" className="form-label">Email address</label> <input type="email" className="form-control" id="exampleInputEmail1" value={formik.values.email} onchange={formik.handlechange} name='email' aria-describedy="emailhelp"/> </div> <div className="mb-3"> <label htmlFor="exampleInputName" className="form-label">Name</label> <input type="text" className="form-control" id="exampleInputName" name="name" /> </div> <div className="mb-3"> <label htmlFor="exampleInputPassword1" className="form-label">Password</label> <input type="password" className="form-control" id="exampleInputPassword1" name="password" /> </div> <div className="mb-3"> <label htmlFor="exampleInputPassword2" className="form-label">Confirm Password</label> <input type="password" className="form-control" id="exampleInputPassword2" name="confirmPassword" /> </div> <button type="submit" className="btn btn-primary">Submit</button> </form> </div> ) تم التعديل في 6 يوليو 2023 بواسطة Mustafa Suleiman تعديل عنوان السؤال 1 اقتباس
0 Adnane Kadri نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 مشكلتك غير واضحة جيدا، فهي تحتاج توصيفا واضحا. ولكن الشيفرة الخاصة بك تمتلك بعض المشاكل هي: أصلح تضمين useState فأنت تكتبها كـ usetate بدون S كبيرة. import React, {useState} from 'react' أزل واحدا من تضميني React واترك واحدا فقط، import React from 'react' import React, {useState} from 'react' الحظ أنه بحذف الثاني ستحتاج استيراد وحدة useState، ولذلك يفضل حذف الأول مباشرة. أصلح استعمال useNavigate لتصبح: let navigate = useNavigate(); فأنت تكتبها بـ n صغيرة. نفس الشيء بخصوص useFormik: let formik =useformik({ ^ و نفس الشيء هنا: let [statusErrors,setStatusErrors] =usestate('') ^ وهنا أيضا: let {errors, set errors} = usestate ([]) ^ هاته هي أخطاء السياق التي تقوم بها بشكل مبدئي، فشيفرتك بحاجة الى تنقيح أولا. في حالة استمرار اي مشكلة يرجى ارفاق نص المشكلة كاملا. اقتباس
0 Mustafa Suleiman نشر 6 يوليو 2023 أرسل تقرير نشر 6 يوليو 2023 يوجد عدة أخطاء في الكود وهي كالتالي: تم استيراد React مرتين واستخدام useReact مرتين أيضًا، وعليك باستيراد React مرة واحدة فقط واستخدام useState مرة واحدة. هناك خطأ في كتابة "useState"، اعتمد على useState وليس usestate. هناك خطأ في كتابة "useNavigate"، نستخدم useNavigate وليس usenavigate. الكود يحتوي على ترقيم غير صحيح في الكود الخاص بـ yup.object. يجب أن يكون yup.object() بدلاً من yup object(). في جزء cpassword, يوجد غلق قوس مفقود بعد [yup.ref('password')]. يوجد أخطاء في كتابة الدوال داخل الكود، استخدم useFormik و useState بدلاً من useformik و usestate على التوالي، ويجب أن يكون onSubmit بدلاً من onsubmit. في دالة register, هناك غلق قوس مفقود بعد if data.message == "succuess". هناك خطأ في كتابة Console.log، والصحيح هو console.log. وإليك الكود بعد تصحيح ما سبق. import React, { useState } from 'react'; import axios from 'axios'; import { useFormik } from 'formik'; import { useNavigate } from 'react-router-dom'; import * as yup from 'yup'; const Register = () => { const [errors, setErrors] = useState([]); const navigate = useNavigate(); const [statusErrors, setStatusErrors] = useState(''); const schema = yup.object({ name: yup.string().required('name is required').min(3, 'min is 3 char').max(10, 'max is 10 char'), email: yup.string().required('email is required').email('not valid email'), password: yup.string().required('password is required').matches(/^[A-Z][a-z0-9]{4,8}$/, 'not valid password'), cpassword: yup.string().required('confirm password is required').oneOf([yup.ref('password')], 'passwords do not match'), }); const formik = useFormik({ initialValues: { email: '', name: '', password: '', cpassword: '', }, validationSchema: schema, onSubmit: register, }); async function register(values) { try { const { data } = await axios.post('https://lazy-blue-sockeye-gear.cyclic.app/api/v1/auth/signup', values); console.log(data); if (data.message === "success") { console.log("registered"); } } catch (error) { console.log(error); } } return ( <div className="container mt-5 pt-5"> <form className="w-50 m-auto text-center" onSubmit={formik.handleSubmit}> <div className="mb-3"> <label htmlFor="exampleInputEmail1" className="form-label">Email address</label> <input type="email" className="form-control" id="exampleInputEmail1" value={formik.values.email} onChange={formik.handleChange} name="email" aria-describedby="emailhelp" /> </div> <div className="mb-3"> <label htmlFor="exampleInputName" className="form-label">Name</label> <input type="text" className="form-control" id="exampleInputName" value={formik.values.name} onChange={formik.handleChange} name="name" /> </div> <div className="mb-3"> <label htmlFor="exampleInputPassword1" className="form-label">Password</label> <input type="password" className="form-control" id="exampleInputPassword1" value={formik.values.password} onChange={formik.handleChange} name="password" /> </div> <div className="mb-3"> <label htmlFor="exampleInputPassword2" className="form-label">Confirm Password</label> <input type="password" className="form-control" id="exampleInputPassword2" value={formik.values.cpassword} onChange={formik.handleChange} name="cpassword" /> </div> <button type="submit" className="btn btn-primary">Submit</button> </form> </div> ); }; export default Register; اقتباس
0 بلال زيادة نشر 8 يوليو 2023 أرسل تقرير نشر 8 يوليو 2023 تم ملاحظة بعض الأخطاء والتحسينات في الكود المقدم. فيما يلي الكود المصحح والمحسن: import React, { useState } from 'react'; import axios from 'axios'; import { useFormik } from 'formik'; import { useNavigate } from 'react-router-dom'; import * as yup from 'yup'; const schema = yup.object({ name: yup.string().required("Name is required").min(3, "Min is 3 characters").max(10, "Max is 10 characters"), email: yup.string().required("Email is required").email('Invalid email'), password: yup.string().required("Password is required").matches(/^[A-Z][a-z0-9]{4,8}$/, "Invalid password"), cpassword: yup.string().required("Confirm password is required").oneOf([yup.ref('password')], 'Passwords do not match'), }); export default function Register() { const [errors, setErrors] = useState([]); const navigate = useNavigate(); const formik = useFormik({ initialValues: { email: "", name: "", password: "", cpassword: "", }, validationSchema: schema, onSubmit: async (values) => { try { const { data } = await axios.post('https://lazy-blue-sockeye-gear.cyclic.app/api/v1/auth/signup', values); console.log(data); if (data.message === "success") { console.log("Registered"); navigate('/success'); // توجيه المستخدم إلى صفحة نجاح التسجيل } } catch (error) { if (error.response) { setErrors(error.response.data.errors); } } }, }); return ( <div className="container mt-5 pt-5"> <form className='w-50 m-auto text-center' onSubmit={formik.handleSubmit}> <div className="mb-3"> <label htmlFor="exampleInputEmail1" className="form-label">Email address</label> <input type="email" className="form-control" id="exampleInputEmail1" value={formik.values.email} onChange={formik.handleChange} name='email' aria-describedby="emailHelp" /> {formik.errors.email && formik.touched.email && ( <div className="text-danger">{formik.errors.email}</div> )} </div> <div className="mb-3"> <label htmlFor="exampleInputName" className="form-label">Name</label> <input type="text" className="form-control" id="exampleInputName" value={formik.values.name} onChange={formik.handleChange} name='name' /> {formik.errors.name && formik.touched.name && ( <div className="text-danger">{formik.errors.name}</div> )} </div> <div className="mb-3"> <label htmlFor="exampleInputPassword1" className="form-label">Password</label> <input type="password" className="form-control" id="exampleInputPassword1" value={formik.values.password} onChange={formik.handleChange} name='password' /> {formik.errors.password && formik.touched.password && ( <div className="text-danger">{formik.errors.password}</div> )} </div> <div className="mb-3"> <label htmlFor="exampleInputPassword2" className="form-label">Confirm Password</label> <input type="password" className="form-control" id="exampleInputPassword2" value={formik.values.cpassword} onChange={formik.handleChange} name='cpassword' /> {formik.errors.cpassword && formik.touched.cpassword && ( <div className="text-danger">{formik.errors.cpassword}</div> )} </div> <button type="submit" className="btn btn-primary">Submit</button> </form> </div> ); } تم ملاحظة بعض الأخطاء والتحسينات في الكود المقدم. فيما يلي الكود المصحح والمحسن: تم إجراء التحسينات والتصحيحات التالية: تم تعديل توابع useFormik و useNavigate لأنه تم استيراد React بشكل مكرر. تم إضافة حالة errors باستخدام useState للتعامل مع أي أخطاء تعودها الخادم. تم تحديد initialValues و onSubmit و validationSchema في useFormik لتعريف القيم الابتدائية والتحقق من صحة الحقول والمعالجة عند تقديم النموذج. تم إضافة رسائل الخطأ المرتبطة بكل حقل وعرضها في حالة حدوث أخطاء. تم إضافة محاولة واستثناء للتعامل مع أخطاء الشبكة أثناء عملية التسجيل وتعيين أي أخطاء تعودها الخادم في حالة وجودها. تم إضافة توجيه المستخدم إلى صفحة نجاح التسجيل (يجب استبدال "/success" بالمسار الصحيح). تم إضافة شرط لعرض رسالة الخطأ إذا كان هناك أخطاء قادمة من الخادم. اقتباس
0 عبدالباسط ابراهيم نشر 8 يوليو 2023 أرسل تقرير نشر 8 يوليو 2023 يمكن إضافة بعض التحسينات الإضافية لتحسين الكود أكثر، ومنها: إضافة disabled لزر الإرسال في حالة عدم صحة الحقول: يمكن إضافة خاصية `disabled` إلى زر الإرسال حتى يتم تعطيله في حالة عدم صحة الحقول. هذا يساعد في تجنب إرسال النموذج بشكل غير صحيح ويخبر المستخدم أن هناك مشكلة يجب حلها. يمكن إضافة `disabled` بشكل مشروط باستخدام `formik.isValid` وفقًا للكود التالي: <button type="submit" className="btn btn-primary" disabled={!formik.isValid}> Submit </button> إضافة رسالة تأكيد عندما يتم التسجيل بنجاح: بعد التسجيل بنجاح، يمكن إضافة رسالة تأكيد لإخبار المستخدم بأن التسجيل تم بنجاح. يمكن إضافة عنصر `div` في النموذج يحتوي على رسالة التأكيد، كما هو موضح في الكود التالي: {formik.submitCount > 0 && !formik.isValid && ( <div className="text-danger mb-3">Please fix the errors above</div> )} {formik.submitCount > 0 && formik.isValid && ( <div className="text-success mb-3">Registered successfully</div> )} يتم تمرير `formik.submitCount` و `formik.isValid` إلى العنصر `div` بحيث يتم عرض رسالة التأكيد فقط عندما يتم إرسال النموذج بنجاح. اقتباس
السؤال
Moaz Zant
تعديل عنوان السؤال
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.