Réagir-routeur: Comment appeler manuellement le Lien?
Je suis nouveau sur ReactJS et de Réagir-Routeur. J'ai un composant qui reçoit par l'intermédiaire des accessoires <Link/>
objet de réagir-routeur. Chaque fois que l'utilisateur clique sur un bouton "suivant" à l'intérieur de ce composant, je veux invoquer <Link/>
objet manuellement.
Maintenant, je suis en utilisant refs pour accéder à la la sauvegarde de l'instance et manuellement en cliquant sur le 'a' de la balise que <Link/>
génère.
Question: Est-il un moyen pour appeler manuellement le Lien (ex:this.props.next.go
)?
C'est le code actuel, j'ai:
//in MasterPage.js
var sampleLink = <Link to="/sample">Go To Sample</Link>
<Document next={sampleLink} />
//in Document.js
...
var Document = React.createClass({
_onClickNext: function() {
var next = this.refs.next.getDOMNode();
next.querySelectorAll('a').item(0).click(); //this sounds like hack to me
},
render: function() {
return (
...
<div ref="next">{this.props.next} <img src="rightArrow.png" onClick={this._onClickNext}/></div>
...
);
}
});
...
C'est le code que je voudrais avoir:
//in MasterPage.js
var sampleLink = <Link to="/sample">Go To Sample</Link>
<Document next={sampleLink} />
//in Document.js
...
var Document = React.createClass({
render: function() {
return (
...
<div onClick={this.props.next.go}>{this.props.next.label} <img src="rightArrow.png" /> </div>
...
);
}
});
...
Vous devez vous connecter pour publier un commentaire.
Réagir Routeur v4 - Composant de Redirection (mise à jour 2017/04/15)
La v4 est recommandé pour permettre à votre méthode de rendu pour attraper une redirection. L'utilisation de l'état ou les accessoires afin de déterminer si la redirection composant doit être indiqué (ce qui déclenche alors une redirection).
Référence: https://reacttraining.com/react-router/web/api/Redirect
Réagir Routeur v4 - Référence Routeur Contexte
Vous pouvez également profiter de
Router
's contexte qui est exposée à l'Réagissent composant.C'est de cette façon
<Redirect />
fonctionne sous le capot.Référence: https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Redirect.js#L46,L60
Réagir Routeur v4 - Externe de Mutation de l'Histoire de l'Objet
Si vous avez encore besoin de faire quelque chose de similaire à la v2 de l'application, vous pouvez créer une copie de
BrowserRouter
alors exposer lehistory
comme exportable constante. Ci-dessous est un exemple de base, mais vous pouvez le composer pour l'injecter avec des accessoires si nécessaire. On note des mises en garde avec des cycles de vie, mais elle doit toujours rerender le Routeur, tout comme dans la v2. Cela peut être utile pour les redirections après une demande d'API à partir d'une action de la fonction.Dernière
BrowserRouter
pour prolonger: https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/modules/BrowserRouter.jsRéagir Routeur v2
Pousser un nouvel état de la
browserHistory
exemple:Référence: https://github.com/reactjs/react-router/blob/master/docs/guides/NavigatingOutsideOfComponents.md
Réagir Routeur 4 comprend un withRouter HOC qui vous donne accès à la
history
de l'objet viathis.props
:https://github.com/rackt/react-router/blob/bf89168acb30b6dc9b0244360bcbac5081cf6b38/examples/transitions/app.js#L50
ou vous pouvez même essayer d'exécution onClick ce (plus violents de la solution):
assign
n'est pas une propriété, c'est une fonction.Ok, je pense que j'ai été capable de trouver une solution pour que.
Maintenant, au lieu de les envoyer
<Link/>
comme prop de Document, j'ai envoyer<NextLink/>
qui est un wrapper personnalisé pour réagir-routeur Lien. En faisant cela, je suis en mesure d'avoir la flèche vers la droite dans le cadre de la structure des liens en évitant d'avoir le code de routage à l'intérieur de l'objet Document.La mise à jour du code se présente comme suit:
P. S: Si vous utilisez la dernière version de réagir-routeur, vous devrez utiliser les
this.context.router.transitionTo
au lieu dethis.context.transitionTo
. Ce code fonctionnera très bien pour réagir-routeur version 0.12.X.Réagir Routeur 4
Vous pouvez facilement appeler la méthode push via contexte v4:
this.context.router.push(this.props.exitPath);
où le contexte est:
BrowserRouter
, mon des composants d'un objet de contexte ne contient pas derouter
objet. Suis-je en train de faire quelque chose de mal?router: React.PropTypes.object.isRequired
. Je ne sais pas pourquoi il ne fonctionne pas sans leisRequired
clé. Aussi,<Link>
semble être en mesure d'obtenir lahistory
contexte, mais je n'arrivais pas à le reproduire.this.props.history.push()
à Réagir Routeur v4. Je n'ai découvert cela en inspectant les accessoires qui Réagissent Routeur passe bien. Il semble fonctionner mais je ne suis pas sûr si c'est une bonne idée.encore une fois c'est JS 🙂 cela fonctionne encore ....