I have a parent component called EnrollForm with a BrowserRouter that routes to different sub-components which are the pages of my overall EnrollForm.
Each time a sub-component page is filled out and next btn is clicked, all form fields are saved to sub-component state obj, then that state is passed to the parent EnrollForm state. This flow is working correctly.. however when I added the line of code to href to the next sub-component, the parent EnrollForm state is deleted and so is BioForm's state.
Any help would be so greatly appreciated, It's probably simple but I've been looking at it for so long...
EnrollForm Component:
class EnrollForm extends Component {
state = {
}
setParentFormState = (newStateObj, fromComponent) => {
this.setState({...this.state, ...newStateObj}, () => {
console.log('Updated EnrollForm component state from ' + fromComponent);
console.log(this.state);
});
}
render() {
return (
<Router>
<div className='workflow'>
<Route path='/enrollment-form/bio' render={(routeProps)=>(<BioForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/citizenship' render={(routeProps)=>(<CitizenshipForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/identity' render={(routeProps)=>(<IdentityForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/attributes' render={(routeProps)=>(<AttributesForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/address' render={(routeProps)=>(<AddressForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/eligibility' render={(routeProps)=>(<EligibilityForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/documents' render={(routeProps)=>(<DocumentsForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/location' render={(routeProps)=>(<LocationForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/appointment' render={(routeProps)=>(<ApptTimeForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
<Route path='/enrollment-form/status' render={(routeProps)=>(<StatusForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
</div>
</Router>
);
}
}
export default EnrollForm;
BioForm Component:
class BioForm extends Component {
state = {
first_name: null,
middle_name: null,
last_name: null,
u_suffix: null,
u_gender: null,
u_dob: null,
u_lang: null,
u_email: null,
u_country_code_1: null,
u_country_code_2: null,
u_phone_1: null,
u_phone_2: null,
u_contact_method: null
}
nextButtonClicked = event => {
let form = document.getElementById('applicant-form');
let formDataJsObj = FormFunctions.getJsObjFromFormData(form);
let keyToDelete = 'u_email[verify]';
//This field is removed from the form data object because it is not sent in the POST request
FormFunctions.removeKeyFromFormObj(formDataJsObj, keyToDelete);
console.log(formDataJsObj);
this.setState(formDataJsObj, () => {
this.props.setParentFormState(this.state, this.constructor.name);
console.log('BioForm data submitted and parent state updated.. changing pages.');
window.location.href = '/enrollment-form/citizenship';
});
}
render(){//markup}
}