Reputation: 1429
I have a signup form and after a user signs up, it will redirect to the email confirmation page(/confirmation) where a user types a confirmation code that I sent via an email. When a user submits a confirmation code, I want to send the code and a user's email to server-side.
My signup form code(simplified):
constructor(props){
super(props);
this.state = {
email: '',
password: '',
errors: {},
}
}
handleSubmit(e){
e.preventDefault();
this.props.userSignup(this.state).then(
() => {
this.context.router.push({
pathname: '/confirmation'
})
},
)
}
render(){ ...
I do not want to add any params to my path.
How can I pass this.state.email
to confirmation page?
Upvotes: 17
Views: 47948
Reputation: 10442
You can also redirect by this component from react-router:
...
if (shouldRedirect) {
return <Redirect to={"/some-path"} state={{ value: "hey"}}>
}
return <div>Welcome</div>
Then use it in the new component:
...
const location = useLocation()
const value = location.state.value
If you are using typescript, add types to the state as such:
interface State {
value: string
}
const location = useLocation<State>()
Upvotes: 3
Reputation: 582
if you don't want to lose state upon a page refresh you can use local storage:
handleSubmit() {
localStorage.setItem('email',
JSON.stringify(this.state.email));
}
and then retrieve from local storage on any other page, perhaps in componentWillMount:
componentWillMount(){
let email = '';
if (localStorage && localStorage.getItem('email')) {
email = JSON.parse(localStorage.getItem('email'));
}
this.setState({email: email})
}
Upvotes: 3
Reputation: 5669
What i have done to pass data without context object is by using history prop,
this.props.history.push({
pathname:"/shopdetail",
state:{
key:"value"
}
});
And in the ShopDetail component you can access the object like,
this.props.location.state.key
Upvotes: 12
Reputation: 1429
I figured it out.
this.context.router.push({
pathname: '/confirmation',
state: {email: this.state.email}
})
and access state by:
this.props.location.state.email
Upvotes: 41