Je travaille sur un formulaire de mot de passe oublié. Lorsque l'utilisateur remplit le formulaire - je veux remplacer le formulaire par un message de remerciement, puis rediriger l'utilisateur vers la page de connexion après 5 secondes. Je veux également vider l'état ForgotData - de sorte qu'un utilisateur puisse retourner au formulaire - ou actualiser etc .. pour le remplir à nouveau ..Reactjs - rediriger après x secondes et réinitialiser l'état
mon code actuel ressemble à ceci - j'ai essayé d'annuler le état sur componentWillUnmount - mais cela ne fonctionne pas.
<Redirect refresh='5' to='/login' >
^est quelque chose comme ça possible?
la page oubliée ressemble à ceci.
import React, { Component } from 'react'
import { withRouter, Redirect } from 'react-router-dom';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { fetchForget } from '../../actions/forgotAction';
import { Row, Col } from 'antd';
// components
import ForgotPasswordSyncValidationForm from './ForgotPasswordSyncValidationForm'
// this is a class because it needs state
class ForgotPassword extends Component {
constructor(props, context) {
super(props, context);
this.submit = this.submit.bind(this);
}
componentDidMount() {
// console.log('this', this)
}
componentWillMount() {
document.body.classList.add('screenbackground');
}
componentWillUnmount() {
document.body.classList.remove('screenbackground');
this.state = {
forgotData: null
}
}
submit(data) {
this.props.fetchForget(data);
}
render() {
// when the user has applied for a new password
/*
if(this.props.forgotData.isForgot){
setTimeout(function() {
return <Redirect to='/login'/>;
}.bind(this), 5000);
}
console.log(this.props.forgotData)
*/
return (
<div className="Page form-components dark">
<h2>Forgot Password?</h2>
<Row>
<Col xs={24} sm={24} md={10}>
<p>A message here about what this forgot form is about</p>
</Col>
<Col xs={24} sm={24} md={24}>
<Row>
<Col xs={24} sm={24} md={6}>
{!this.props.forgotData.isForgot ? (
<ForgotPasswordSyncValidationForm onSubmit={this.submit} />
) : (
<div>
<p>Thank you for filling in the forgot password form. We have generated a new password for you, please check your email.</p>
<Redirect to='/login'/>
</div>
)}
</Col>
</Row>
</Col>
</Row>
<div className="shell" />
<div className="screen-background forgot" />
</div>
)
}
}
function mapStateToProps(state) {
return {
forgotData: state.forgot
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({ fetchForget }, dispatch);
}
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(ForgotPassword))
utile? Peut avoir besoin de créer un état de déconnexion - https://stackoverflow.com/questions/35622588/how-to-reset-the-state-of-a-redux-store –
https://stackoverflow.com/questions/43230194/how-to-use-redirect-in-the-new-reager-routeur-dom-of-reactjs –
Quelle est la différence entre le comportement actuel et le comportement souhaité. –