Estou usando o mesmo componente para três rotas diferentes:
<Router>
<Route path="/home" component={Home} />
<Route path="/users" component={Home} />
<Route path="/widgets" component={Home} />
</Router>
Existe alguma maneira de combiná-lo, para ser como:
<Router>
<Route path=["/home", "/users", "/widgets"] component={Home} />
</Router>
javascript
reactjs
path
react-router
url-routing
Chetan Garg
fonte
fonte
Respostas:
A partir do react -router v4.4.0-beta.4 e oficialmente da v5.0.0, agora você pode especificar uma matriz de caminhos que resolvem para um componente, por exemplo
Cada caminho na matriz é uma string de expressão regular.
A documentação para esta abordagem pode ser encontrada aqui .
fonte
exact
atributo para um único caminho?yarn upgrade
de 4.3 a 4.4. Foi lançado oficialmente?Pelo menos com react-router v4, o
path
pode ser uma string de expressão regular, então você pode fazer algo assim:Como você pode ver, é um pouco prolixo, então se o seu
component
/route
for simples assim, provavelmente não vale a pena.E, claro, se isso realmente acontecer com frequência, você sempre poderá criar um componente de agrupamento
paths
que.map
aceite um parâmetro de matriz , que faz a regex ou lógica reutilizável.fonte
/^\/(home|users|widgets)/
Agora,/widgets
corresponderá, mas/dashboard/widgets
não corresponderá.Warning: Failed prop type: Invalid prop
path` do tiporegexp
fornecido paraRoute
, esperadostring
.`<Route path="/(new|edit)/user/:id?" ... />
path={`/(${ROUTES.HOME}|${ROUTES.HOME_1})/`}
Não acho que seja se você usar uma versão do React Router anterior à v4.
Você pode usar um
map
como faria com qualquer outro componente JSX, embora:EDITAR
Você também pode usar uma regex para o caminho no react-router v4 , desde que seja compatível com path-to-regexp . Veja a resposta de @Cameron para mais informações.
fonte
key
adereço.A partir do react-route-dom v5.1.2, você pode passar vários caminhos conforme abaixo
E obviamente você precisa importar o arquivo Home jsx no topo.
fonte
Outra opção: use o prefixo da rota.
/pages
por exemplo. Você vai ter/pages/home
/pages/users
/pages/widgets
E então resolva de forma detalhada dentro do
Home
componente.fonte
De acordo com a documentação do Roteador React, o 'caminho' do proptype é do tipo string. Portanto, não há como passar um array como props para o Componente de Rota.
Se a sua intenção é apenas alterar a rota, você pode usar o mesmo componente para uma rota diferente, sem problemas com isso
fonte
A partir do react-router v4.4, você pode fazer algo assim abaixo.
armazene o caminho em uma variável e passe abaixo e use '|' Operador.
então, para todos os caminhos correspondentes, ele renderizará o
component={Home}
que for de sua necessidade.fonte