Considérer ce qui suit:
var AppRoutes = [
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
</Route>,
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Header} >
<Route path="/withheader" handler={Page} />
</Route>
</Route>,
<Route handler={App} someProp="defaultProp">
<Route path=":area" handler={Area} />
<Route path=":area/:city" handler={Area} />
<Route path=":area/:city/:locale" handler={Area} />
<Route path=":area/:city/:locale/:type" handler={Area} />
</Route>
];
J'ai un modèle d'application, un modèle d'en-tête et un ensemble de routes paramétrées avec le même gestionnaire (dans le modèle d'application). Je veux pouvoir desservir 404 routes lorsque quelque chose n'est pas trouvé. Par exemple, / CA / SanFrancisco doit être trouvé et géré par Area, alors que / SanFranciscoz doit être 404.
Voici comment je teste rapidement les itinéraires.
['', '/', '/withheader', '/SanFranciscoz', '/ca', '/CA', '/CA/SanFrancisco', '/CA/SanFrancisco/LowerHaight', '/CA/SanFrancisco/LowerHaight/condo'].forEach(function(path){
Router.run(AppRoutes, path, function(Handler, state){
var output = React.renderToString(<Handler/>);
console.log(output, '\n');
});
});
Le problème est que / SanFranciscoz est toujours géré par la page Area, mais je veux qu'il soit 404. De plus, si j'ajoute un NotFoundRoute à la première configuration d'itinéraire, toutes les pages Area 404.
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
<NotFoundRoute handler={NotFound} />
</Route>,
Qu'est-ce que je fais mal?
Voici un résumé qui peut être téléchargé et expérimenté.
react-router
4m1r
la source
la source
Réponses:
DefaultRoute et NotFoundRoute ont été supprimés dans react-router 1.0.0.
Je tiens à souligner que la route par défaut avec l'astérisque doit être la dernière du niveau de hiérarchie actuel pour fonctionner. Sinon, il remplacera toutes les autres routes qui apparaissent après lui dans l'arborescence car il est le premier et correspond à chaque chemin.
Pour react-router 1, 2 et 3
Si vous souhaitez afficher un 404 et conserver le chemin (même fonctionnalité que NotFoundRoute)
Si vous souhaitez afficher une page 404 mais changer l'url (même fonctionnalité que DefaultRoute)
Exemple avec plusieurs niveaux:
Pour react-router 4 et 5
Gardez le chemin
Rediriger vers une autre route (changer l'URL)
L'ordre compte!
la source
<Redirect from='*' to='/home' />
dans cette syntaxe:const routes = { component: Main, childRoutes: [ { path: '/', component: Home }, ], indexRoute: { component: Main, }, };
<Route render={(props)=> <MyComponent myProp={someVar} {...props} />} />
Dans les versions plus récentes de react-router, vous souhaitez encapsuler les routes dans un Switch qui ne rend que le premier composant correspondant. Sinon, vous verriez plusieurs composants rendus.
Par exemple:
la source
path="*"
sur l'itinéraire NotFound. Si vouspath
l' omettez , la Route correspondra toujours.path
itinéraires inconnusAvec la nouvelle version de React Router (qui utilise maintenant 2.0.1), vous pouvez utiliser un astérisque comme chemin pour acheminer tous les «autres chemins».
Cela ressemblerait donc à ceci:
la source
Cette réponse est pour react-router-4. Vous pouvez encapsuler toutes les routes dans le bloc Switch, qui fonctionne exactement comme l'expression de casse de commutation, et rend le composant avec la première route correspondante. par exemple)
Quand utiliser
exact
Sans exact:
Avec exact:
Maintenant, si vous acceptez des paramètres de routage, et si cela s'avère incorrect, vous pouvez le gérer dans le composant cible lui-même. par exemple)
Maintenant dans ProfilePage.js
Pour plus de détails, vous pouvez passer par ce code:
App.js
ProfilePage.js
la source
Selon la documentation , l'itinéraire a été trouvé, même si la ressource ne l'a pas été.
Ainsi, vous pouvez toujours ajouter une ligne dans l'
Router.run()
avantReact.render()
pour vérifier si la ressource est valide.Handler
Passez simplement un accessoire au composant ou remplacez le composant par un personnalisé pour afficher la vue NotFound.la source
<Route path="*" to="/dest" />
ou<Redirect from="*" to="/dest" />
comme dernière sous-route à correspondre, je croisJe viens de jeter un coup d'œil à votre exemple, mais si je l'ai bien compris, vous essayez d'ajouter 404 routes à des segments dynamiques. J'ai eu le même problème il y a quelques jours, j'ai trouvé # 458 et # 1103 et j'ai fini avec une vérification faite à la main dans la fonction de rendu:
J'espère que cela pourra aider!
la source