I am in need of help, I am coding this form and after I submit it, the state for posted changes from false to true and I would expect return Redirect to=/landing ; to redirect me to the landing page, however, it doesn't which I assume is because the line doesn't re-run after the initial render. I was hoping that changing the state of posted would cause a re-render. I have heard about using history push and tried to adapt it to my code yet I failed. I don't know how to wrap my component with withRouter given that I have it already wrapped with connect. How can I achieve this? I have read numerous posts about this yet I can't figure how to adapt it to my code. Any help is appreciated.
import React, { useState } from react;
import Navbar from ./Navbar;
import { connect, useDispatch } from react-redux;
import { Redirect } from react-router-dom;
import { createProject } from ../actions/projectAction;
import PropTypes from prop-types;
import { push } from connected-react-router;
const EditProject = ({ posted, createProject }) => {
const dispatch = useDispatch();
const [formData, setFormData] = useState({
projectTitle: ,
projectDescription: ,
deliveryDate:
});
const { projectTitle, projectDescription, deliveryDate } = formData;
const onChange = e => {
setFormData({ ...formData, [e.target.name]: e.target.value });
};
const onSubmit = async e => {
e.preventDefault();
createProject({ projectTitle, projectDescription, deliveryDate });
dispatch(push(/login));
};
if (posted) {
return <Redirect to=/landing />;
}
return (
<div>
<Navbar />
<div className=container>
<form onSubmit={e => onSubmit(e)}>
<h4>Project Title</h4>
<input
name=projectTitle
value={projectTitle}
className=form-control
placeholder=Your project title
onChange={e => onChange(e)}
/>
<h4>Delivery Date</h4>
<input
type=date
className=form-control
name=deliveryDate
value={deliveryDate}
onChange={e => onChange(e)}
/>
<h4>Description</h4>
<textarea
name=projectDescription
value={projectDescription}
className=form-control
rows=10
onChange={e => onChange(e)}
></textarea>
<input type=submit className=btn btn-primary value=Create />
<a href=/projects className=btn btn-danger>
Cancel
</a>
</form>
</div>
</div>
);
};
EditProject.propTypes = {
createProject: PropTypes.func.isRequired
};
const mapStateToProps = state => ({
posted: state.posted
});
export default connect(mapStateToProps, { createProject })(EditProject);