Estou usando o React Router para meu site e encontrei o seguinte problema. Eu defini meu componente principal do aplicativo da seguinte maneira:
import './App.css'
import { Navbar } from './Navbar'
import { Outlet } from 'react-router'
function App() {
return (
<div>
<Navbar />
<Outlet />
</div>
)
}
export default App
e então usei este componente para rota base:
<BrowserRouter>
<Routes>
<Route path="/" element={<App />} >
<Route path='home' element={<Home />} index />
<Route path='about' element={<About />} />
</Route>
<Route path="*" element={<Navigate to="/Home" replace />} />
</Routes>
</BrowserRouter>
Tudo funciona bem, posso navegar nas páginas home e about, mas quando navego para /
, aparece uma página em branco com Navbar
, o que é compreensÃvel, mas não sei como poderia exibir minha página inicial padrão. Posso de alguma forma instruir o React para redirecionar para home
? Não consigo definir Home
o componente para /
rota, pois isso quebraria totalmente o aplicativo (já que o App
componente possui o Outlet
componente).
Versões das bibliotecas:
"react-dom": "^18.2.0",
"react-router": "^6.21.1",
"react-router-dom": "^6.21.1",
Parece que você já sabe o que causa o problema, só precisa de uma orientação com a parte de redirecionamento.
Como você já mencionou, o código está funcionando conforme o esperado. Olhando para sua estrutura, não há filhos configurados para serem renderizados quando o caminho "/" for correspondido. Para corrigir isso, você deve usar o
index
atributo e acionar uma navegação para"/home"
quando o caminho"/"
for acessado.Para fazer isso:
Observe a linha que adicionei:
Esta nova rota possui
index
atributos e também usa<Navigate>
componentes fornecidos pelo react-router.index
atributo: Este atributo torna esta rota a rota padrão para o pai, que é "/" no seu caso.<Navigate>
: Aqui no seu exemplo, não podemos renderizar<Home>
diretamente, pois você solicitou especificamente para não fazer isso:Portanto, ele redirecionará todos
"/"
os caminhos"/home"
para.Embora isso provavelmente resolva o problema que você está enfrentando, sugiro fortemente que você use um não vazio
"/"
e faça o roteamento lá. Na maioria dos casos,"/"
é a casa, e não"/home"
.