constructor(){ super() this.state = { countDown: 6 }} componentDidMount(){ this.myInterval = setInterval(() =>{ browserhistory.push("/time-up")componentDidUpdate(){ if(this.state.countDown === 0){ browserHistory.push("/time-up"); } } //I want to redirect the user to a page called "time up" when the countdown gets to zero in the componentDidUpdate lifecycle
4 Réponses :
Au lieu de browserHistory.push("/time-up");
, ajoutez window.location = "/time-up"
C'est fait, je viens de mettre à jour ma réponse, je pensais que c'était assez clair, car il a un code similaire pour le faire.
Vous essayez de rediriger vers / time-up, donc je suppose que vous essayez de faire une navigation interne. Vous pouvez le faire en utilisant le support d'historique provenant de react-router
Au lieu de browserHistory.push("/time-up");
vous pouvez écrire this.props.history.push("/time-up")
Si vous ne disposez pas de l'historique, vous pouvez injecter en augmentant votre composant avec le withRouter
HOC
Pour rediriger depuis componentDidUpdate()
utilisez ceci,
import { Redirect } from 'react-router-dom'; componentDidUpdate(){ if(this.state.countDown === 0){ <Redirect to={'/time-up'} /> } }
Une autre façon est d'utiliser la redirection depuis le paquet react-router-dom
,
componentDidUpdate(){ if(this.state.countDown === 0){ window.location.href = "/time-up" } }
Remarque: votre extrait de code est désordonné, vous utilisez componentDidUpdate
dans componentDidMount
? Si oui, vous ne devriez pas faire cela. Les deux sont des méthodes différentes et ne peuvent pas être appelées dans une autre, placez les deux différemment.
J'ai utilisé les deux méthodes de cycle de vie dans différentes lignes. J'ai utilisé le window.location.href et cela a fonctionné, mais j'utiliserai le composant Redirect car il est plus propre. Merci.
@ManuelHelamanSotoAlvarez Super. Si cela résout votre problème, vous pouvez le marquer comme réponse acceptée.
vous devez décrémenter le temps ou il restera à 6
Copie possible de Comment rediriger vers une autre page Web?
Hors sujet: Ne devriez-vous pas utiliser
setTimeout
place? L'intervalle sert à répéter les événements. Si vous insistez, pour une raison quelconque, sur l'utilisation d'intervalle, il devrait au moins être effacé avant de rediriger l'utilisateur, avecclearInterval(this.myInterval)