Here is the table I’m trying to create:
When I change the value of the dropdown bars, the value becomes undefined and I don’t understand why. But initially, when I click submit, it works and the alert pops up with both of the default values I set in this.state.
This is what the alert looks like when I change the SDG:
Here is the code:
import React from 'react'
class Dropdown extends React.Component {
constructor(props) {
super(props);
this.state = {
sdg: 'SDG 1: No Poverty',
assignment_type: 1
};
this.handleSDGChange = this.handleSDGChange.bind(this);
this.handleAssignmentChange = this.handleAssignmentChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
// Handling all 3 input changes
handleSDGChange(event) {
this.setState({sdg: event.target.sdg});
}
handleAssignmentChange(event) {
this.setState({assignment_type: event.target.assignment_type});
}
// Handling all 3 input submissions
handleSubmit(event) {
console.log(this.state.sdg)
alert(this.state.sdg + '--- Assignment Type: ' + this.state.assignment_type);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>SDG:</label>
<select value={this.state.sdg} onChange={this.handleSDGChange}>
<option value="SDG 1: No Poverty">SDG 1: No Poverty</option>
<option value="SDG 2: Zero Hunger">SDG 2: Zero Hunger</option>
<option value="SDG 3: Good Health & Well Being">SDG 3: Good Health & Well Being</option>
</select>
<label>Assignment Type:</label>
<select value={this.state.assignment_type} onChange={this.handleAssignmentChange}>
<option value="1">1: Discussion Project</option>
<option value="2">2: PDF Case study</option>
<option value="3">3: Community Project</option>
</select>
<input type="submit" value="Submit" />
</form>
);
}
}
export default Dropdown
Advertisement
Answer
You want to change your event.target.sdg and event.target.assignment_type to event.target.value. event.target does not have those properties, those are simply the variables you defined in your this.state, if you want to access the value of the event of each of the handlers, you use .value.

