Considere o seguinte:
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>
];
Eu tenho um modelo de aplicativo, um cabeçalho de modelo e um conjunto de rotas parametrizado com o mesmo manipulador (no modelo de aplicativo). Quero poder servir rotas 404 quando algo não for encontrado. Por exemplo, / CA / SanFrancisco deve ser encontrado e tratado por Área, enquanto / SanFranciscoz deve 404.
Veja como teste rapidamente as rotas.
['', '/', '/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');
});
});
O problema é que / SanFranciscoz está sempre sendo tratado pela página Área, mas quero que seja 404. Além disso, se eu adicionar um NotFoundRoute à primeira configuração de rota, todas as páginas Área 404.
<Route handler={App} someProp="defaultProp">
<Route path="/" handler={Page} />
<NotFoundRoute handler={NotFound} />
</Route>,
O que estou fazendo de errado?
Aqui está uma essência que pode ser baixada e testada.
react-router
4m1r
fonte
fonte
Respostas:
DefaultRoute e NotFoundRoute foram removidos no react-router 1.0.0.
Gostaria de enfatizar que a rota padrão com o asterisco deve ser a última no nível atual da hierarquia para funcionar. Caso contrário, ele substituirá todas as outras rotas que aparecerem depois na árvore porque é a primeira e corresponde a todos os caminhos.
Para o roteador de reação 1, 2 e 3
Se você deseja exibir um 404 e manter o caminho (mesma funcionalidade que NotFoundRoute)
Se você deseja exibir uma página 404, mas alterar o URL (mesma funcionalidade do DefaultRoute)
Exemplo com vários níveis:
Para o roteador de reação 4 e 5
Mantenha o caminho
Redirecionar para outra rota (alterar URL)
A ordem é importante!
fonte
<Redirect from='*' to='/home' />
nesta sintaxe:const routes = { component: Main, childRoutes: [ { path: '/', component: Home }, ], indexRoute: { component: Main, }, };
<Route render={(props)=> <MyComponent myProp={someVar} {...props} />} />
Nas versões mais recentes do react-router, você deseja agrupar as rotas em um Switch que renderiza apenas o primeiro componente correspondente. Caso contrário, você verá vários componentes renderizados.
Por exemplo:
fonte
path="*"
na rota NotFound. A omissãopath
fará com que a rota corresponda sempre.path
rotas totalmente desconhecidasCom a nova versão do React Router (usando o 2.0.1 agora), você pode usar um asterisco como um caminho para rotear todos os 'outros caminhos'.
Então ficaria assim:
fonte
Esta resposta é para react-router-4. Você pode agrupar todas as rotas no bloco Switch, que funciona exatamente como a expressão de maiúsculas e minúsculas, e renderiza o componente com a primeira rota correspondente. por exemplo)
Quando usar
exact
Sem exata:
Com exato:
Agora, se você estiver aceitando parâmetros de roteamento e se estiver incorreto, poderá tratá-lo no próprio componente de destino. por exemplo)
Agora no ProfilePage.js
Para mais detalhes, você pode passar por este código:
App.js
ProfilePage.js
fonte
De acordo com a documentação , a rota foi encontrada, embora o recurso não fosse.
Portanto, você sempre pode adicionar uma linha
Router.run()
antesReact.render()
para verificar se o recurso é válido. Basta passar um suporte para o componente ou substituir oHandler
componente por um personalizado para exibir a visualização NotFound.fonte
<Route path="*" to="/dest" />
ou<Redirect from="*" to="/dest" />
como a última sub rota para corresponder, acreditoAcabei de dar uma olhada rápida no seu exemplo, mas se entendi da maneira certa, você está tentando adicionar 404 rotas a segmentos dinâmicos. Eu tive o mesmo problema há alguns dias, encontrei os números 458 e 1103 e acabei com uma verificação feita manualmente na função de renderização:
espero que ajude!
fonte