Réagir-Routeur: Non, Pas Trouvé La Route?
De considérer les éléments suivants:
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 une Application, un Modèle d'HeaderTemplate, et Paramétré ensemble d'itinéraires avec le même gestionnaire (à l'intérieur de l'App de modèle). Je veux être en mesure de servir 404 routes quand quelque chose n'est pas trouvé. Par exemple, /CA/SanFrancisco doit être trouvé et géré par la Région, alors que les /SanFranciscoz devrait 404.
Voici comment j'ai tester rapidement les routes.
['', '/', '/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 /SanFranciscoz est toujours gérée par la Zone de la page, mais je veux qu'elle 404. Aussi, si j'ajoute un NotFoundRoute à la première route de configuration, toutes les pages 404.
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
<NotFoundRoute handler={NotFound} />
</Route>,
Ce que je fais mal?
Voici un résumé qui peut être téléchargé et expérimenté.
https://gist.github.com/adjavaherian/aa48e78279acddc25315
- Pour la future référence pour les personnes qui se retrouvent à cette question, hormis le droit de réponse ci-dessous, à lire dans le cet article. Je suis tombé sur cela plus tôt et je pense que personne l'explique parfaitement.
Vous devez vous connecter pour publier un commentaire.
Dejakob réponse est bonne, DefaultRoute et NotFoundRoute ont été supprimées afin de réagir-routeur 1.0.0. Je voudrais souligner que la route par défaut avec l'astérisque a être le dernier dans le niveau actuel de la hiérarchie au travail. Sinon, il correspond à tous les itinéraires qui apparaissent dans l'arbre.
Pour réagir-routeur 1, 2 et 3
Si vous souhaitez afficher une erreur 404 et garder le chemin d'accès (Même fonctionnalité que NotFoundRoute)
Si vous souhaitez afficher une page d'erreur 404, mais modifier l'url (Même fonctionnalité que DefaultRoute)
Exemple avec de multiples niveaux:
Pour réagir-routeur 4
Garder le chemin d'accès
Rediriger vers une autre route (changement d'url)
<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} />} />
<Redirect to="/404" />
ne semble pas fonctionner sur mon réagir-routeur-dom 4.4.0...Dans les versions plus récentes de réagir-routeur vous voulez envelopper les routes dans un Switch qui le rend seulement la première appariés composant. Sinon, vous devez voir plusieurs composants rendus.
Par exemple:
path="*"
sur le NotFound Route. En omettantpath
sera la cause de la Route toujours à la hauteur.Avec la nouvelle version de Réagir Routeur (à l'aide d'2.0.1 maintenant), vous pouvez utiliser un astérisque comme un chemin vers la route de tous les 'autres chemins.
Donc il devrait ressembler à ceci:
Selon la la documentation, la route était trouvé, même si la ressource n'a pas été.
Donc, vous pouvez toujours ajouter une ligne dans la
Router.run()
avantReact.render()
pour vérifier si la ressource est valide. Il suffit de passer une cale en bas de la composante ou de remplacer leHandler
composant avec un programme personnalisé pour afficher la NotFound vue.<Route path="*" to="/dest" />
ou<Redirect from="*" to="/dest" />
comme la dernière des sous route pour le match, je croisCette réponse est pour réagir-routeur-4.
Vous pouvez envelopper tous les itinéraires dans le bloc de commutateurs, qui fonctionne exactement comme le cas de commutateur d'expression, et rend le composant avec le premier correspondant à la route. par exemple)
Quand utiliser
exact
Sans exact:
Exacte:
Maintenant, si vous acceptez les paramètres de routage, et si il s'avère incorrect, vous pouvez le gérer dans le composant cible elle-même. par exemple)
Maintenant dans ProfilePage.js
Pour plus de détails, vous pouvez passer par ce code:
App.js
ProfilePage.js
J'ai juste eu un coup d'oeil rapide à votre exemple, mais si j'ai bien compris le droit chemin que vous essayez d'ajouter 404 routes à la dynamique des segments. J'ai eu le même problème il y a quelques jours, a trouvé #458 et #1103 et fini vers le haut avec une main de vérifier au sein de la fonction rendu:
espère que ça aide!