फ्रंटएंड भाग बैकएंड भाग की तुलना में बहुत आसान है। मुझे बस एक मोडल बनाना है और दो बार डेटा भेजने के लिए इसका उपयोग करना है।
मोडल बनाने के लिए, मैंने अपने पिछले प्रोजेक्ट चैट-नैट में मैसेजमोडल घटक से कुछ कोड, एक मॉडल के एनकैप्सुलेशन के लिए क्लासनेम की प्रतिलिपि बनाई।
मैं एक "पासवर्ड भूल गए?" जोड़ूंगा। लॉगिन पेज पर बटन, और मोडल खोलने के लिए ऑनक्लिक हैंडलर सेट करें
मुझे यह बताने के लिए बूलियन स्थिति का उपयोग करने की आवश्यकता है कि ओटीपी मांगने से पहले उपयोगकर्ता के ईमेल पर भेजा गया है या नहीं। मैं राज्य का नाम isOTPSent रख रहा हूं
यहां कुछ घटक और हुक हैं जिनका मैं इस प्रोजेक्ट के मौजूदा फ्रंटएंड से पुन: उपयोग कर रहा हूं:
यहां मॉडल के लिए संपूर्ण कोड है:
// src/components/PasswordResetModal.tsx import React, { useState } from "react" import AuthForm from "./AuthForm"; import FormInput from "./FormInput"; import Box from "./Box"; import { useAxios } from "../hooks/useAxios"; interface FormData { email: string, new_password: string, otp: string, } interface Props { isVisible: boolean, onClose: () => void, } const PasswordResetModal: React.FC= ({ isVisible, onClose }) => { const [formData, setFormData] = useState ({ email: "", new_password: "", otp: "" }); const [isLoading, setLoading] = useState (false); const [isOTPSent, setOTPSent] = useState (false); const { apiReq } = useAxios(); const handleClose = (e: React.MouseEvent ) => { if ((e.target as HTMLElement).id === "wrapper") { onClose(); // could have setOTPSent(false), but avoiding it in case user misclicks outside } }; const handleChange = (e: React.ChangeEvent ) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value, }); }; const handleSubmit = async (e: React.FormEvent ) => { e.preventDefault(); setLoading(true); if (!isOTPSent) { // first request for sending otp, const response = await apiReq ("post", "/api/reset-password", formData) if (response) { alert("OTP has been sent to your email"); setOTPSent(true); } } else { // then using otp to change password const response = await apiReq ("put", "/api/reset-password", formData) if (response) { alert("Password has been successfully reset\nPlease log in again"); // clear the form setFormData({ email: "", otp: "", new_password: "", }) // close modal onClose(); } } setLoading(false); }; if (!isVisible) return null; return ( ) } export default PasswordResetModal{isOTPSent && ( >)}
और यहां बताया गया है कि लॉगिन फॉर्म में मोडल का सशर्त प्रतिपादन कैसे संभाला जाता है
// src/pages/auth/Login.tsx import PasswordResetModal from "../../components/PasswordResetModal"; const Login: React.FC = () => { const [showModal, setShowModal] = useState(false); return ( ) {/* link to the register page here */}setShowModal(false)} />
किए गए! या ऐसा मैंने सोचा।
अपने विकास परिवेश में ऐप चलाते समय, मुझे एक बग का पता चला जहां बैकएंड लंबे समय से चलने पर ईमेल नहीं जाएंगे।
हम अगली पोस्ट में इस बग को ठीक कर देंगे
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3