One of the problems with your select element is that it's neither a controlled or an uncontrolled input element. What you want to achieve can be done with both methods, and it looks like you attempted to make a controlled component.
I'll provide a solution for both:
Clearing a controlled <select>
element
You need to turn your select element into a controlled component by assigning it a value which is controlled by the state. Then, make your handleFocus
function reset that state variable.
For example:
class MyApp extends React.Component {
constructor() {
super();
this.state = {select: ''};
}
onChangeOption = (event) => {
this.setState({select: event.target.value});
}
handleFocus = (event) => {
this.setState({select: ''});
}
render() {
return (
<select name="select1" value={this.state.select} onChange={this.onChangeOption} onFocus={this.handleFocus}>
<option value=''>Please select...</option>
<option value='A'>A</option>
<option value='B'>B</option>
<option value='C'>C</option>
<option value='D'>D</option>
</select>
);
}
}
ReactDOM.render(<MyApp />, 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"></div>
Clearing an uncontrolled <select>
element
If you want to let the DOM manage the select element you could do the following to clear the value whenever the focus
event is fired.
class MyApp extends React.Component {
handleFocus = (event) => {
event.target.value = '';
}
render() {
return (
<select name="select1" onFocus={this.handleFocus}>
<option value=''>Please select...</option>
<option value='A'>A</option>
<option value='B'>B</option>
<option value='C'>C</option>
<option value='D'>D</option>
</select>
);
}
}
ReactDOM.render(<MyApp />, 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"></div>