'React Router Dom doesn't redirect me after signing in
I'm creating a basic login page right now and I'm new to react. So far the page redirects me successfully to the '/login' page since I'm not logged in. After I log in I get a console.log of 'Logged in as guest' which is what I want for now, however, I don't get redirected to the home page. Can someone help me with this?
The relevant code is after the return call but I left it all there for context
Many thanks!
import Intro from './components/Intro';
import SignIn from './components/SignIn';
import Home from './components/Home';
import { BrowserRouter as Router, Route, Routes, Navigate, useParams, useNavigate } from 'react-router-dom';
import './App.css';
import { useState, useEffect } from 'react';
function App() {
const guestUser = {
username: "guest",
password: "guest",
}
const [user, setUser] = useState({username: "", password: ""})
const [error, setError] = useState("");
const Login = details => {
console.log(details);
if(details.username == guestUser.username && details.password == guestUser.password) {
console.log("Logged in as guest");
setUser({
username: details.username,
});
} else {
console.log("details do not match");
setError("Details do not match.")
}
}
const Logout = () => {
console.log("logout");
}
return (
<div className="App">
<Router>
<Routes>
<Route path="/Login" element={<Intro Login={Login} Logout={Logout} error={error}/>} />
<Route path="/Home" element={<Home user={user}/>}/>
<Route path=""
element={user.username !== "" ? <Navigate to ="/Home" /> :
<Navigate to ="/Login"/>}/>
</Routes>
</Router>
</div>
);
}
export default App;
Solution 1:[1]
In your login function, after successful login you are not navigating to your home page...
import Intro from './components/Intro';
import SignIn from './components/SignIn';
import Home from './components/Home';
import { BrowserRouter as Router, Route, Routes, Navigate, useParams, useNavigate } from 'react-router-dom';
import './App.css';
import { useState, useEffect } from 'react';
function App() {
const guestUser = {
username: "guest",
password: "guest",
}
const [user, setUser] = useState({username: "", password: ""})
const [error, setError] = useState("");
const Login = details => {
console.log(details);
if(details.username == guestUser.username && details.password == guestUser.password) {
console.log("Logged in as guest");
setUser({
username: details.username,
});
<Navigate to ="/Home"/>}/>
} else {
console.log("details do not match");
setError("Details do not match.")
}
}
const Logout = () => {
console.log("logout");
}
return (
<div className="App">
<Router>
<Routes>
<Route path="/Login" element={<Intro Login={Login} Logout={Logout} error={error}/>} />
<Route path="/Home" element={<Home user={user}/>}/>
<Route path=""
element={user.username !== "" ? <Navigate to ="/Home" /> :
<Navigate to ="/Login"/>}/>
</Routes>
</Router>
</div>
);
}
export default App;
This will work
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | awesome webber |
