Я в процессе изучения React.Я выполнял одно из упражнений рефрактора, как показано ниже:
import React, { Component } from "react";
import "./App.css";
class App extends Component {
state = {
form: {
firstName: "",
lastName: "",
email: "",
password: ""
}
};
handleFirstNameChange = e => {
this.setState({
form: {
firstName: e.target.value
}
});
};
handleLastNameChange = e => {
this.setState({
form: {
lastName: e.target.value
}
});
};
handleEmailChange = e => {
this.setState({
form: {
email: e.target.value
}
});
};
handlePasswordChange = e => {
this.setState({
form: {
password: e.target.value
}
});
};
validateForm = () => {
const formInputs = ["firstName", "lastName", "email", "password"];
for (let i = 0; i < formInputs.length; i++) {
const inputName = formInputs[i];
if (!this.state.form[inputName].length) {
return false;
}
}
return true;
};
handleSubmit = () => {
if (this.validateForm()) {
console.log("Success!");
} else {
console.log("Failure!");
}
};
render() {
return (
<div
style={{
display: "flex",
justifyContent: "center",
alignItems: "center"
}}
>
<form
className="Form"
onSubmit={e => {
e.preventDefault();
this.handleSubmit();
}}
>
<input name="firstName" onChange={this.handleFirstNameChange} />
<input name="lastName" onChange={this.handleLastNameChange} />
<input name="email" onChange={this.handleEmailChange} />
<input name="password" onChange={this.handlePasswordChange} />
<button className="no-padding">Submit</button>
</form>
</div>
);
}
}
export default App;
, и я изменил его на:
import React, { Component } from "react";
import "./App.css";
class App extends Component {
state = {
form: {
firstName: "",
lastName: "",
email: "",
password: ""
}
};
handleChange = e => {
this.setState({
form: {
[e.target.name]: e.target.value
}
});
};
validateForm = () => {
const formInputs = ["firstName", "lastName", "email", "password"];
for (let i = 0; i < formInputs.length; i++) {
const inputName = formInputs[i];
if (!this.state.form[inputName].length) {
return false;
}
}
return true;
};
handleSubmit = () => {
if (this.validateForm()) {
console.log("Success!");
} else {
console.log("Failure!");
}
};
render() {
return (
<div
style={{
display: "flex",
justifyContent: "center",
alignItems: "center"
}}
>
<form
className="Form"
onSubmit={e => {
e.preventDefault();
this.handleSubmit();
}}
>
<input name="firstName" onChange={this.handleChange} />
<input name="lastName" onChange={this.handleChange} />
<input name="email" onChange={this.handleChange} />
<input name="password" onChange={this.handleChange} />
<button className="no-padding">Submit</button>
</form>
</div>
);
}
}
export default App;
По какой-то причине я получил ошибку при отправке формы -
TypeError: Невозможно прочитать свойство 'length' с неопределенным значением
Мне было интересно, что я сделал неправильно в своем коде?
Также есть ли лучший способ реорганизовать код еще больше?