اذهب إلى المحتوى

السؤال

نشر

السلام عليكم.

أريد بإظهار جميع النبيهات عند عملية تسجيل الدخول.

هذه التنبيهات قمت بتجسيدها في شكل مصفوفة alertsالتي تحتوي كائن alert ب: id المعرف الوحيد، msg: يوضح رسالة الخطأ، type: نوع التنبيه (error, success, warning...)

أرجو مساعدتي في الكود الذي قمت به

const alertSlice = createSlice({
  name: "alert",
  initialState: {
    alerts: [],
    alert: {
        id: null,
        type: '',
        msg: ''
    }
  },
  reducers: {
    setAlert(state, action) {
        state.alert = action.payload
    },
    setAlerts(state) {
        state.alerts.push(alert)
    }
  },
});

const alertReducer = alertSlice.reducer;
const alertActions = alertSlice.actions;

export {alertActions, alertReducer}

**********************************

const onSubmit = async e => {
    e.preventDefault()
    if (password.length < 6) {
      dispatch(alertActions.setAlert("Passwords must be more than 6"))
    }
    if (password !== password2) {
      dispatch(alertActions.setAlert("Passwords do not match"))
    }
    console.log("success")
  }

شكرا لكم.

Recommended Posts

  • 0
نشر
بتاريخ 1 دقيقة مضت قال عمر قره محمد:

انا بحاجة لكامل ملفات المشروع حتى استطيع مساعدتك، أو ان كان بإمكانك شرح المنطق الذي تريده بالتفصيل فيمكنني تقديم مثال يقوم بتنفيذ المنطق الذي تريده.

تفضل ملفات المشروع

hsoub.zip

  • 0
نشر

هذا ملف المشروع الخاص بك بعد التعديل :

import React, { useState, useId } from "react";
import { useDispatch, useSelector } from 'react-redux'
import { Link } from "react-router-dom";
// import axios from 'axios'
import { v4 as uuid } from 'uuid';
import { alertActions } from '../../redux/slices/alertSlice'

function Register() {
	const dispatch = useDispatch()
	const alerts = useSelector(store => store.alert.alerts)
	console.log(alerts);

	const [formData, setFormData] = useState({
		name: '',
		email: '',
		password: '',
		password2: ''
	});

	const { name, email, password, password2 } = formData

	const onChange = (e) => {
		setFormData({ ...formData, [e.target.name]: e.target.value })
	}

	const onSubmit = async e => {
		e.preventDefault()
		let errors = [];
		if (password.length < 6) {
			errors.push({
				id: uuid(),
				type: "error",
				msg: "Passwords must be more than 6 characters"
			})
		}
		if (password !== password2) {
			errors.push({
				id: uuid(),
				type: "error",
				msg: "Passwords does not mutch"
			})
		}
		if (errors.length) {
			return dispatch(alertActions.setAlerts(errors))

		}
		console.log("success")
	}

	return (
		<section className="container">
			<h1 className="large text-primary">Sign Up</h1>
			<p className="lead">
				<i className="fas fa-user"></i> Create Your Account
			</p>
			<form
				className="form"
				onSubmit={e => onSubmit(e)}
			>
				<div className="form-group">
					<input
						type="text"
						placeholder="Name"
						name="name"
						value={name}
						onChange={e => onChange(e)}
						required
					/>
				</div>
				<div className="form-group">
					<input
						type="email"
						placeholder="Email Address"
						name="email"
						value={email}
						onChange={e => onChange(e)}
					/>
					<small className="form-text">
						This site uses Gravatar so if you want a profile image, use a
						Gravatar email
					</small>
				</div>
				<div className="form-group">
					<input
						type="password"
						placeholder="Password"
						name="password"
						value={password}
						onChange={e => onChange(e)}
					// minLength="6"
					/>
				</div>
				<div className="form-group">
					<input
						type="password"
						placeholder="Confirm Password"
						name="password2"
						value={password2}
						onChange={e => onChange(e)}
						minLength="6"
					/>
				</div>
				<input
					type="submit"
					className="btn btn-primary"
					value="Register"
				/>
			</form>
			<p className="my-1">
				Already have an account? <Link to="/login">Sign In</Link>
			</p>
		</section>
	);
}

export default Register;

يمكنك الاطلاع على التعديلات التي اجريتها

1- واهما هو استخدام المكتبة uuid بدلاً من uuidv4 :

npm uninstall uuidv4
npm install uuid

و كود الاستدعاء يصبح بالشكل :

import { v4 as uuid } from 'uuid';

2- وتعديل نظام اضافة الاخطاء.

وما انصحك به هو التخلي عن هذا الاسلوب واستخدام react-hot-toast و react-hook-form وهذه المكاتب هي التي استخدمها انا شخصياً من اجل التعامل مع النماذج وهي افضل بكثير واسرع واكثر قابلية للتحكم من ان تبني المنطق بنفسك.

  • 0
نشر
بتاريخ 6 دقائق مضت قال عمر قره محمد:

وما انصحك به هو التخلي عن هذا الاسلوب واستخدام react-hot-toast و react-hook-form وهذه المكاتب هي التي استخدمها انا شخصياً من اجل التعامل مع النماذج وهي افضل بكثير واسرع واكثر قابلية للتحكم من ان تبني المنطق بنفسك.

شكرا لك، 

في العادة أستعمل react-toastify لكن أردت تجربة كود بنفسي دون الحاجة لمكتبات أخرى

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...