1
resposta

switch e exact

Se envolver minhas rotas no componente switch eu ainda precisarei usar o atributo exact?

1 resposta

Olá, Delano! Tudo bem?

Sim, é recomendado que você use. O Switch garante que a primeira rota que contenha parte do caminho requisitado seja renderizada, mas isso não significa que a primeira rota é a rota que você realmente quer renderizada.

Com o exact, você garante que a rota retornada possui exatamente o mesmo caminho requisitado.

Usando os dois, você garante que:

  • Apenas uma rota será renderizada;
  • Essa rota renderizada é exatamente o caminho que você espera.

No exemplo do instrutor, ao tentar acessar /sobre, o Switch traria apenas uma rota, mas dependendo da ordem, a rota escolhida pelo Switch pode tanto ser a correta, /sobre, quanto a errada / (mesmo que nunca as duas ao mesmo tempo). O código abaixo é um exemplo de quando tentasse acessar /sobre retornaria a rota errada pela falta do exact:

<Router>
  <Switch>
    <Route path='/'>
      <Home />
    </Route>
    <Route path='/sobre'>
      <Sobre />
    </Route>
  </Switch>
</Router>    

Aconteceria isso porque a rota / passaria na condição. Como o Switch escolhe apenas a primeira rota que passar na condição, seria apenas a /. Quando o usuário tentasse acessar /sobre, acabaria na Home.

Espero ter ajudado!