Alguém pode explicar a diferença entre
<Route exact path="/" component={Home} />
e
<Route path="/" component={Home} />
Eu não sei o significado de 'exato'
Alguém pode explicar a diferença entre
<Route exact path="/" component={Home} />
e
<Route path="/" component={Home} />
Eu não sei o significado de 'exato'
Respostas:
Neste exemplo, nada realmente. O exact
parâmetro entra em ação quando você tem vários caminhos com nomes semelhantes:
Por exemplo, imagine que tivéssemos um Users
componente que exibisse uma lista de usuários. Também temos um CreateUser
componente usado para criar usuários. O URL para CreateUsers
deve ser aninhado em Users
. Portanto, nossa configuração pode ser algo assim:
<Switch>
<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Agora, o problema aqui, quando formos ao http://app.com/users
roteador, percorrerá todas as nossas rotas definidas e retornará a PRIMEIRA correspondência que encontrar. Portanto, nesse caso, ele encontraria a Users
rota primeiro e depois a retornaria. Tudo bom.
Mas, se formos http://app.com/users/create
, ele percorrerá novamente todas as rotas definidas e retornará a PRIMEIRA correspondência encontrada. O roteador React faz uma correspondência parcial, correspondendo /users
parcialmente /users/create
, para que retornasse incorretamente a Users
rota novamente!
O exact
parâmetro desativa a correspondência parcial para uma rota e garante que ela só retorne a rota se o caminho for uma correspondência EXATA para o URL atual.
Portanto, neste caso, devemos adicionar exact
à nossa Users
rota para que ela corresponda apenas em /users
:
<Switch>
<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Os documentos explicam exact
em detalhes e dão outros exemplos.
exact
deve ser o padrão na minha opinião
/admin//users
no componente Admin e /admin/users/create
no componente Raiz ??? Atualmente, estou com essa situação e a exact
solução típica não funciona corretamente.
Em resumo, se você tiver várias rotas definidas para o roteamento do seu aplicativo, inclua um Switch
componente como este;
<Switch>
<Route exact path="/" component={Home} />
<Route path="/detail" component={Detail} />
<Route exact path="/functions" component={Functions} />
<Route path="/functions/:functionName" component={FunctionDetails} />
</Switch>
Então você deve colocar a exact
palavra-chave na Rota, cujo caminho também é incluído no caminho de outra Rota. Por exemplo, o caminho inicial /
é incluído em todos os caminhos, portanto, é necessário ter uma exact
palavra-chave para diferenciá-lo de outros caminhos que começam com /
. O motivo também é semelhante ao /functions
caminho. Se você quiser usar outro caminho de rota como /functions-detail
ou /functions/open-door
que inclua /functions
nele, será necessário usá-lo exact
para a /functions
rota.
Dê uma olhada aqui: https://reacttraining.com/react-router/core/api/Route/exact-bool
exato: bool
Quando verdadeiro, corresponderá apenas se o caminho corresponder location.pathname
exatamente.
**path** **location.pathname** **exact** **matches?**
/one /one/two true no
/one /one/two false yes
A resposta mais curta é
Por favor, tente isso.
<switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/shop" component={Shop} />
</switch>
exact
atributo / suporte e, portanto, certamente não é uma "resposta". Você deve tentar resolver a questão que está sendo efetivamente perguntada, em vez de dar uma solução para um problema que você não tem certeza de que o OP realmente possui.