J'essaie de faire un SIMPLE en utilisant react-router ( version ^ 1.0.3 ) pour rediriger vers une autre vue et je suis juste fatigué.
import React from 'react';
import {Router, Route, Link, RouteHandler} from 'react-router';
class HomeSection extends React.Component {
static contextTypes = {
router: PropTypes.func.isRequired
};
constructor(props, context) {
super(props, context);
}
handleClick = () => {
console.log('HERE!', this.contextTypes);
// this.context.location.transitionTo('login');
};
render() {
return (
<Grid>
<Row className="text-center">
<Col md={12} xs={12}>
<div className="input-group">
<span className="input-group-btn">
<button onClick={this.handleClick} type="button">
</button>
</span>
</div>
</Col>
</Row>
</Grid>
);
}
};
HomeSection.contextTypes = {
location() {
React.PropTypes.func.isRequired
}
}
export default HomeSection;
tout ce dont j'ai besoin est d'envoyer l'utilisation à '/ login' et c'est tout.
Que puis-je faire ?
erreurs dans la console:
Uncaught ReferenceError: PropTypes n'est pas défini
fichier avec mes itinéraires
// LIBRARY
/*eslint-disable no-unused-vars*/
import React from 'react';
/*eslint-enable no-unused-vars*/
import {Route, IndexRoute} from 'react-router';
// COMPONENT
import Application from './components/App/App';
import Contact from './components/ContactSection/Contact';
import HomeSection from './components/HomeSection/HomeSection';
import NotFoundSection from './components/NotFoundSection/NotFoundSection';
import TodoSection from './components/TodoSection/TodoSection';
import LoginForm from './components/LoginForm/LoginForm';
import SignupForm from './components/SignupForm/SignupForm';
export default (
<Route component={Application} path='/'>
<IndexRoute component={HomeSection} />
<Route component={HomeSection} path='home' />
<Route component={TodoSection} path='todo' />
<Route component={Contact} path='contact' />
<Route component={LoginForm} path='login' />
<Route component={SignupForm} path='signup' />
<Route component={NotFoundSection} path='*' />
</Route>
);
javascript
reactjs
Réagir
la source
la source
routes
définitions, et également s'il y a une raison pour laquelle vous n'utilisez pas deLink
composant? Indiquez également les erreurs que vous obtenez.<Link to="/login">Log In</Link>
,?Uncaught ReferenceError
, vous appelez en tant quePropTypes
, mais vous ne l'importez pas, vous devez importer les PropTypes comme lui-même ou utiliserReact.PropTypes
react-router
changement d'API dans les 5 min .. haha blague, mais juste partiellementRéponses:
Pour une réponse simple, vous pouvez utiliser le
Link
composant fromreact-router
, au lieu debutton
. Il existe des moyens de modifier l'itinéraire dans JS, mais il semble que vous n'en ayez pas besoin ici.Pour le faire par programme dans 1.0.x, procédez comme suit, dans votre fonction clickHandler:
this.history.pushState(null, 'login');
Tiré du document de mise à niveau ici
Vous devriez avoir
this.history
placé sur votre composant de gestionnaire d'itinéraire parreact-router
. S'il s'agit d'un composant enfant sous celui mentionné dans laroutes
définition, vous devrez peut-être le transmettre plus loinla source
if (true) { // redirect to login}
c'est pourquoi je mets cela dans un onClick fonction{validation && <Link to="/login" />Click to login</Link>}
. Si la validation est fausse, rien ne sera rendu.1) react-router>
useHistory
crochet V5 :Si vous avez
React >= 16.8
des composants fonctionnels, vous pouvez utiliser leuseHistory
hook de react-router .2) react-router> V4
withRouter
HOC:Comme @ambar l'a mentionné dans les commentaires, React-router a changé sa base de code depuis sa V4. Voici les documentations - officielles , avec Routeur
3) React-router <V4 avec
browserHistory
Vous pouvez obtenir cette fonctionnalité en utilisant react-router
BrowserHistory
. Code ci-dessous:4) Redux
connected-react-router
Si vous avez connecté votre composant avec redux et que vous avez configuré le routeur connecté-react-router, tout ce que vous avez à faire est de
this.props.history.push("/new/url");
dire que vous n'avez pas besoin dewithRouter
HOC pour injecterhistory
les accessoires du composant.la source
react-router-dom
faitPar exemple, lorsqu'un utilisateur clique sur un lien,
<Link to="/" />Click to route</Link>
react-router recherchera/
et vous pourrez utiliserRedirect to
et envoyer l'utilisateur ailleurs comme la route de connexion.À partir de la documentation pour ReactRouterTraining :
la source
<Redirect> elements are for router configuration only and should not be rendered
.La solution la plus simple pour le Web!
À jour 2020 a
confirmé travailler avec:
Utilisez le
useHistory()
crochet!la source
Avec react-router v2.8.1 (probablement d'autres versions 2.xx également, mais je ne l'ai pas testé), vous pouvez utiliser cette implémentation pour faire une redirection de routeur.
la source
La solution la plus simple est:
la source