I have a large HTML Form and it has multiple fields in multiple components.
All these components are in a Parent Component.
How Can I submit a form and getting values from all child components?
<form>
<Col md={6} className="mb-3">
<SameDay />
</Col>
<Col md={6} className="mb-3">
<International />
</Col>
<Col md={6} className="mb-3">
<OutBondTracking/>
</Col>
<Col md={6} className="mb-3">
<FulfilmentOptions />
</Col>
<button
type="button"
className="btn btn-primary mr-2"
onClick={() => this.submitHandler()}
>
Submit
</button>
</form>
Advertisement
Answer
you can pass a handler function in the subcomponents(child components) that gets triggered when anything changes and updates the state in the parent component eg:
class ParentComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
data: {} . // form data
}
}
onChangeHandlerFn = (data) => {
// update the state;
this.setState({ data })
}
submitHandler = () => {
// your handler function
post your data from the state (data)
}
render() {
return (
<form>
<Col md={6} className="mb-3">
<SameDay />
</Col>
<Col md={6} className="mb-3">
<International onChangeHandlerFn={this.onChangeHandlerFn}/>
</Col>
<Col md={6} className="mb-3">
<OutBondTracking onChangeHandlerFn={this.onChangeHandlerFn} />
</Col>
<Col md={6} className="mb-3">
<FulfilmentOptions onChangeHandlerFn={this.onChangeHandlerFn} />
</Col>
<button type="button" className="btn btn-primary mr-2" onClick=
{this.submitHandler}>Submit</button>
</form>
);
}
}
handler function onChangeHandlerFn={this.onChangeHandlerFn}, should be called if anything is changed in the child components, which intern updates the state of the parent component
Hope this helps !!