Essayer de comprendre comment puis-je revenir à la page précédente. J'utilise [react-router-v4][1]
C'est le code que j'ai configuré dans ma première page de destination:
<Router>
<div>
<Link to="/"><div className="routerStyle"><Glyphicon glyph="home" /></div></Link>
<Route exact path="/" component={Page1}/>
<Route path="/Page2" component={Page2}/>
<Route path="/Page3" component={Page3}/>
</div>
</Router>
Afin de transmettre aux pages suivantes, je fais simplement:
this.props.history.Push('/Page2');
Cependant, comment puis-je revenir à la page précédente? Essayé quelques choses comme mentionné ci-dessous mais pas de chance: 1. this.props.history.goBack();
Donne une erreur:
TypeError: null n'est pas un objet (évaluation 'this.props')
this.context.router.goBack();
Donne une erreur:
TypeError: null n'est pas un objet (évaluation 'this.context')
this.props.history.Push('/');
Donne une erreur:
TypeError: null n'est pas un objet (évaluation 'this.props')
Publier le code Page1
ci-dessous:
import React, {Component} from 'react';
import {Button} from 'react-bootstrap';
class Page1 extends Component {
constructor(props) {
super(props);
this.handleNext = this.handleNext.bind(this);
}
handleNext() {
this.props.history.Push('/page2');
}
handleBack() {
this.props.history.Push('/');
}
/*
* Main render method of this class
*/
render() {
return (
<div>
{/* some component code */}
<div className="navigationButtonsLeft">
<Button onClick={this.handleBack} bsStyle="success">< Back</Button>
</div>
<div className="navigationButtonsRight">
<Button onClick={this.handleNext} bsStyle="success">Next ></Button>
</div>
</div>
);
}
export default Page1;
Je pense que le problème est avec la liaison:
constructor(props){
super(props);
this.goBack = this.goBack.bind(this); // i think you are missing this
}
goBack(){
this.props.history.goBack();
}
.....
<button onClick={this.goBack}>Go Back</button>
Comme je l'ai supposé avant de poster le code:
constructor(props) {
super(props);
this.handleNext = this.handleNext.bind(this);
this.handleBack = this.handleBack.bind(this); // you are missing this line
}
this.props.history.goBack();
C'est la bonne solution pour react-router v4
Mais une chose à garder à l’esprit est que vous devez vous assurer que cet.props.histoire existe.
Cela signifie que vous devez appeler cette fonction this.props.history.goBack();
à l'intérieur du composant entouré par <Route />.
Si vous appelez cette fonction dans un composant plus en profondeur dans l'arborescence des composants, cela ne fonctionnera pas.
EDIT:
Si vous voulez avoir un objet historique dans le composant qui est plus profond dans l'arborescence des composants (qui n'est pas entouré par <Route>), vous pouvez faire quelque chose comme ceci:
...
import {withRouter} from 'react-router-dom';
class Demo extends Component {
...
// Inside this you can use this.props.history.goBack();
}
export default withRouter(Demo);
À utiliser avec React Router v4 et un composant fonctionnel n’importe où dans l’arborescence.
import React from 'react';
import { withRouter } from 'react-router-dom';
const GoBack = ({ history }) => <img src="./images/back.png" onClick={() => history.goBack()} alt="Go back" />;
export default withRouter(GoBack);
Pouvez-vous fournir le code où vous utilisez this.props.history.Push('/Page2');
?
Avez-vous essayé la méthode goBack ()?
this.props.history.goBack();
C'est listé ici https://reacttraining.com/react-router/web/api/history
Avec un exemple en direct ici https://reacttraining.com/react-router/web/example/modal-gallery
Chaque réponse ici a des parties de la solution totale. Voici la solution complète que j'avais l'habitude de faire fonctionner à l'intérieur de composants plus profonds que ceux utilisés pour Route:
import React, { Component } from 'react'
import { withRouter } from 'react-router-dom'
^ Vous avez besoin de cette deuxième ligne pour importer une fonction et exporter un composant en bas de page.
render() {
return (
...
<div onClick={() => this.props.history.goBack()}>GO BACK</div>
)
}
^ Requis la fonction de flèche vs simplement onClick = {this.props.history.goBack ()}
export default withRouter(MyPage)
^ Enveloppez le nom de votre composant avec 'withRouter ()'
Essayer:
this.props.router.goBack()