'How to reset a React-Bootstrap Form after submit?
I added React-Bootstrap to my app. So I change a basic form with React-Bootstrap components.
I can't reset a form after a submit.
Here is my simplified code:
import React from 'react';
import { Form, FormGroup, FormControl, ControlLabel, Button } from 'react-bootstrap';
class MyForm extends React.Component {
onSubmit( event ) {
event.preventDefault();
const textAreaValue = this.textArea.value;
console.log("textAreaValue : ", textAreaValue);
// some code here...
// ERROR HERE (but it works if I
// replace bootstrap <Form>
// component by a simple <form>
this.messageForm.reset();
}
render() {
return (
<Form
className="form"
ref={ form => this.messageForm = form }
onSubmit={ this.onSubmit.bind( this ) }
>
<FormGroup controlId="formControlsTextarea">
<ControlLabel>My Control Label</ControlLabel>
<FormControl
required
inputRef={ input => this.textArea = input }
componentClass="textarea" />
</FormGroup>
<Button type="submit">ok</Button>
</Form>
);
}
}
export default MyForm;
I could continue to use a normal then it works but I wonder how to use that one component of React-Boostrap.
Has someone an idea?
The error:
× TypeError: this.messageForm.reset is not a function
When I log this.messageForm it's a React-Bootstrap component. I also tested with inputRef
instead of ref
but it doesn't work
Solution 1:[1]
By the way I suggest the simplest is to just use simple <form>
instead of React-Bootstrap <Form>
. And then this.messageForm.reset()
works well.
But if for some reasons you need to use Bootstrap Form component, add an id to the form as follows:
<Form
id='myForm'
className="form"
ref={ form => this.messageForm = form }
onSubmit={ this.onSubmit.bind( this ) }>
...
</Form>
And in the onSubmit
method, access the form element created by React-Bootstrap as follows:
ReactDOM.findDOMNode(this.messageForm).reset();
Solution 2:[2]
Use https://redux-form.com/ to manage your input fields.
This way you have much control with your form fields.
Solution 3:[3]
take e for event as a parameter in onSubmit function. then use e.target.reset();
at the end of function. It's work perfectly.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | isherwood |
Solution 2 | Noah John Ucab |
Solution 3 | Chowdhury Tafsir Ahmed Siddiki |