我正在尝试在 React 中做一个验证表单,但自从我添加了保存用户注册数据以来,我遇到了很多问题。
import React, { useState } from "react";
import "./registerstyle.css";
import EyeIcon from "./EyeIcon.png";
import EyeIconHide from "./EyeIconHide.png";
import { signup } from "../../api/client";
function RegisterPage() {
const [showPassword, setShowPassword] = useState(false);
const [passwordVisible, setPasswordVisible] = useState(false);
const [showConfirmPassword, setShowConfirmPassword] = useState(false);
const [confirmPasswordVisible, setConfirmPasswordVisible] = useState(false);
const [nameEmpty, setNameEmpty] = useState(false);
const [confirmPasswordEmpty, setconfirmPasswordEmpty] = useState(false);
const [emailEmpty, setEmailEmpty] = useState(false);
const [passwordEmpty, setPasswordEmpty] = useState(false);
const [newsletter, setNewsletter] = useState(false); // Aggiunto lo stato per la checkbox
const [name, setName] = useState(null);
const [email, setEmail] = useState(null);
const [password, setPassword] = useState(null);
const [cpass, setCpass] = useState(null);
const user = { name: name, email: email, password: password, cpass: cpass };
const handleShowPassword = () => {
setShowPassword(!showPassword);
setPasswordVisible(!passwordVisible);
};
const handleShowConfirmPassword = () => {
setShowConfirmPassword(!showConfirmPassword);
setConfirmPasswordVisible(!confirmPasswordVisible);
};
const handleFormSubmit = (e) => {
e.preventDefault();
// Verifica se i campi email e password sono vuoti
if (!e.target.email.value) {
setEmailEmpty(true);
console.log("email True");
} else {
setEmailEmpty(false);
console.log("email False");
}
if (!e.target.name.value) {
setNameEmpty(true);
} else {
setNameEmpty(false);
}
if (!e.target.password.value) {
setPasswordEmpty(true);
} else {
setPasswordEmpty(false);
}
if (!e.target.confirmPassword.value) {
setconfirmPasswordEmpty(true);
} else {
setconfirmPasswordEmpty(false);
}
};
const handleNewsletterChange = (e) => {
setNewsletter(e.target.checked);
}; // Funzione per gestire il cambiamento di stato della checkbox
const passwordInputClass = passwordVisible ? "passwordVisible" : "";
const confirmPasswordInputClass = confirmPasswordVisible ? "confirmPasswordVisible" : "";
return (
Already have an account? Login now
);
}
export default RegisterPage;
这是注册代码:
import axios from "axios";
// const client = axios.create({
// baseURL: "http://localhost:9000", // o l'endpoint del vostro backend
// headers: {
// "Content-Type": "application/json",
// // "Authorization": "Bearer " + localStorage.getItem("token")
// }
// });
// export default client;
async function signup(user) {
const newUser = JSON.stringify(user);
console.log("sono dentro la funzione");
try {
return await axios.post("http://localhost:3000/signup", newUser);
} catch (err) {
if (err.response) {
return err.response.data;
} else {
console.log("Errore:", err.message);
}
}
};
async function login(user) {
const newUser = JSON.stringify(user);
console.log("sono dentro");
try {
return await axios.post("http://localhost:3000/login", newUser);
//return await axios.post("http://localhost:3000/login",)
} catch (err) {
if (err.response) {
return err.response.data;
} else {
console.log("Errore:", err.message);
}
}
};
async function loginOld(credentials) {
const loginData = JSON.stringify(credentials);
await axios.post("http://localhost:3000/login", loginData);
};
export { signup, login };
我预计会发生什么,当您单击按钮时字段留空时,它们会从我创建的图像中弹出以圈出留空的字段。有时它会给出如下错误:
TypeError: Cannot read properties of undefined (reading 'value')
at handleFormSubmit (http://localhost:3000/main.7b4752724621de0f0bc6.hot-update.js:66:25)
at onClick (http://localhost:3000/main.7b4752724621de0f0bc6.hot-update.js:387:11)
at HTMLUnknownElement.callCallback (http://localhost:3000/static/js/bundle.js:14655:18)
at Object.invokeGuardedCallbackDev (http://localhost:3000/static/js/bundle.js:14699:20)
at invokeGuardedCallback (http://localhost:3000/static/js/bundle.js:14756:35)
at invokeGuardedCallbackAndCatchFirstError (http://localhost:3000/static/js/bundle.js:14770:29)
at executeDispatch (http://localhost:3000/static/js/bundle.js:18914:7)
at processDispatchQueueItemsInOrder (http://localhost:3000/static/js/bundle.js:18940:11)
at processDispatchQueue (http://localhost:3000/static/js/bundle.js:18951:9)
at dispatchEventsForPlugins (http://localhost:3000/static/js/bundle.js:18960:7)```
I'm desperate and don't really know where to put my hands. Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
由于您控制每个输入的状态,因此您不需要获取提交的值(即使您尝试这样做的方式行不通)。相反,请在提交回调中使用受控值:
const handleFormSubmit = (e) => { e.preventDefault(); // Verifica se i campi email e password sono vuoti if (!email) { setEmailEmpty(true); console.log("email True"); } else { setEmailEmpty(false); console.log("email False"); } if (!name) { setNameEmpty(true); } else { setNameEmpty(false); } if (!password) { setPasswordEmpty(true); } else { setPasswordEmpty(false); } if (!confirmPassword) { setconfirmPasswordEmpty(true); } else { setconfirmPasswordEmpty(false); } };