Как вы можете видеть ниже, проблема не в том, что e.target
является нулевым или неопределенным. Проблема на самом деле в вашем заявлении переключателя.
Вы смешиваете синтаксис switch
и if else
здесь case name === "displayName":
. Переключатель автоматически выполняет name ==
часть. В вашем случае все, что вам нужно сделать, это поставить то, что name
должно быть равно, а не целое выражение.
Измените, как показано ниже, с правильными case
и break
после обновления состояния.
const {useState, useEffect} = React;
const SignUp = props => {
const [displayName, setDisplayName] = useState("");
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [confirmPassword, setConfirmPassword] = useState("");
const handleChange = e => {
console.log(e.target.name); // Logs correctly
console.log(e.target.value); // Logs correctly
const { name, value } = e.target;
switch (name) {
case "displayName":
setDisplayName(value);
break;
case "email":
setEmail(value);
break;
case "password":
setPassword(value);
break;
case "confirmPassword":
setConfirmPassword(value);
break;
}
};
const handleSubmit = e => {
console.log(e);
e.preventDefault();
if (password !== confirmPassword) {
alert("passwords do not match");
return;
}
const { signUpStart } = props;
//signUpStart({ email, password, displayName });
};
return (
<div>
<form onSubmit={handleSubmit}>
<FormInput
type="text"
name="displayName"
handleChange={handleChange}
value={displayName}
label="display name"
/>
<FormInput
type="email"
required
name="email"
value={email}
handleChange={handleChange}
label="email"
/>
<FormInput
type="password"
name="password"
handleChange={handleChange}
value={password}
label="password"
/>
<FormInput
type="psssword"
name="confirmPassword"
handleChange={handleChange}
value={confirmPassword}
label="comfirmPassword"
/>
<button type="submit" name="password">Sign</button>
</form>
</div>
);
};
const FormInput = ({label,handleChange, ...otherProps}) => {
return (
<div>
<input
{...otherProps}
onChange={handleChange}
className='form-input'
/>
{label ?
<label>{label}</label>
: null}
</div>
);
}
ReactDOM.render(<SignUp />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>