У меня есть ФОРМА, которая просто должна сохранять значения в состоянии при отправке. Я столкнулся с проблемой при этом,
Я получаю только значение последнего ввода в моем элементе управления формой, то есть:
formControls: qualification: "a"
Я получаю эту ошибку: Предупреждение: компонент изменяет контролируемый ввод текста типа на неконтролируемый. Элементы ввода не должны переключаться с контролируемого на неконтролируемый (или наоборот наоборот). Выберите между использованием контролируемого или неконтролируемого элемента ввода на протяжении всего срока службы компонента.
Я понял вышеупомянутую проблему, поэтому я объявил свое состояние внутри конструктора, чтобы мой элемент ввода имел значение еще до того, как сработала функция onChange. Но это также, похоже, не решает мою проблему.
Ниже мой код:
import React, { Component } from 'react';
import './user.css';
class User extends Component {
constructor(props){
super(props);
this.state = {
formControls: {
name: "",
age: "",
occupation:"",
hometown: "",
qualification: ""
}
}
}
detailsHandler = (e) => {
const name = e.target.name;
const value = e.target.value;
console.log(name, value)
this.setState({
formControls: {
[name]: value
}
});
}
submitFormHandler = (e) => {
e.preventDefault();
console.log(this.state)
}
render() {
return (
<div>
<div className="main-container">
<div className="form-header">
<p className="">Fill details here</p>
</div>
<div className="form-container">
<form onSubmit={this.submitFormHandler}>
<div className="form-row">
<div className="form-label"><label>Name: </label></div>
<input type="text" placeholder="name" name="name" value={this.state.formControls.name} onChange={this.detailsHandler}/>
</div>
<div className="form-row">
<div className="form-label"><label>Age: </label></div>
<input type="text" placeholder="age" name="age" value={this.state.formControls.age} onChange={this.detailsHandler}/>
</div>
<div className="form-row">
<div className="form-label"><label>Occupation: </label></div>
<input type="text" placeholder="Occupation" name="occupation" value={this.state.formControls.occupation} onChange={this.detailsHandler}/>
</div>
<div className="form-row">
<div className="form-label"><label>Hometown: </label></div>
<input type="text" placeholder="Hometown" name= "hometown" value={this.state.formControls.hometown} onChange={this.detailsHandler}/>
</div>
<div className="form-row">
<div className="form-label"><label>Qualification: </label></div>
<input type="text" placeholder="Qualification" name="qualification" value={this.state.formControls.qualification} onChange={this.detailsHandler}/>
</div>
<div>
<input type="submit" value="SUBMIT" />
</div>
</form>
</div>
</div>
</div>
);
}
}
export default User;
Может ли кто-нибудь помочь мне понять, что я делаю не так?