J'ai légèrement modifié la Réagir Routeur exemple pour le secteur privé, des itinéraires à jouer gentil avec Redux, mais aucun des composants sont rendus lors de la Liaison ou de Rediriger vers d'autres pages. L'exemple peut être trouvé ici:
https://reacttraining.com/react-router/web/example/auth-workflow
Leur PrivateRoute composant ressemble à ceci:
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
fakeAuth.isAuthenticated ? (
<Component {...props}/>
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)
)}/>
)
Mais, parce que j'ai incorporé dans un Redux de l'application, j'ai dû régler la PrivateRoute un peu afin que je puisse accéder à la redux magasin, ainsi que le parcours des Accessoires:
const PrivateRouteComponent = (props) => (
<Route {...props.routeProps} render={() => (
props.logged_in ? (
<div>{props.children}</div>
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}} /> )
)} />
);
const mapStateToProps = (state, ownProps) => {
return {
logged_in: state.auth.logged_in,
location: ownProps.path,
routeProps: {
exact: ownProps.exact,
path: ownProps.path
}
};
};
const PrivateRoute = connect(mapStateToProps, null)(PrivateRouteComponent);
export default PrivateRoute
Chaque fois que je ne suis pas connecté et a frappé un PrivateRoute, je suis correctement redirigé vers /login. Cependant, après par exemple connectant et en utilisant un <Redirect .../>
, ou en cliquant sur l'un <Link ...>
pour un PrivateRoute, l'URI de mises à jour, mais la vue n'est pas. Il reste sur le même composant.
Ce que je fais mal?
Juste pour compléter le tableau, dans l'application de l' index.js
il y a quelques chose sans pertinence, et les itinéraires sont mis en place comme ceci:
ReactDOM.render(
<Provider store={store}>
<App>
<Router>
<div>
<PrivateRoute exact path="/"><Home /></PrivateRoute>
// ... other private routes
<Route path="/login" component={Login} />
</div>
</Router>
</App>
</Provider>,
document.getElementById('root')
);