I\'m trying to handle changes in my form. I have title, description, and category.
The first input(title) -> Unable to type in the field.
The second input(d
Problem is in onChange function, you are using common onChange function so instead of updating all with same value update the specific state value.
Use this function:
handleChange(e) {
this.setState({
[e.target.name] : e.target.value
});
}
Use name property to update the specific state, and you need to define the name='category' with select field.
Check the working example:
class AddDeal extends React.Component {
constructor(props) {
super(props);
// Set the state
this.state = {
title: '',
description: '',
category: 'technology'
};
this.onSubmit = this.onSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
}
onSubmit(e) {
e.preventDefault();
alert('Title is: ' + this.state.title + 'Description is: ' + this.state.description + 'Category is: ' + this.state.category);
}
handleChange(e) {
this.setState({
[e.target.name] : e.target.value
});
}
render() {
return (
<div>
<h1>Add Deal</h1>
<form onSubmit={this.onSubmit}>
<label><input value={this.state.title} onChange={this.handleChange} type="text" name="title"/></label>
<label><input value={this.state.description} onChange={this.handleChange} type="text" name="description" /></label>
<select name='category' value={this.state.category} onChange={this.handleChange}>
<option value="technology">Technology</option>
<option value="food">Food</option>
<option value="drink">Drink</option>
<option value="books">Books</option>
</select>
<input type="submit" value="Submit"/>
</form>
</div>
);
}
}
ReactDOM.render(<AddDeal/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='app'/>
change your function to
handleChange(e) {
this.setState({
[e.target.name] : e.target.value
});
}