I am Using React Router Dom V6
Here if(!localStorage.getItem("token")){ navigate("/login") }
is not Working
import React,{useState,useEffect} from 'react';
import axios from 'axios';
import { useNavigate } from 'react-router-dom';
const Home = (props) => {
const [user,setUser]=useState(null);
let navigate = useNavigate();
const getUser=async()=>{ **Here i have access the token**
const res=await axios.get("/auth",{
headers:{
Authorization: `Bearer ${localStorage.getItem('token')}`,
},
});
setUser(res.data);
};
useEffect(()=>{
getUser();
},[]);
const logout=()=>{ **I have removed the token here**
localStorage.removeItem("token");
navigate("/login");
};
if(!localStorage.getItem("token")){ //HERE IS NOT WORKING
navigate("/login");
}
return (
<div className="m-5">
<div className="jumbotron">
<p className="lead">Welcome {user && user.name}</p>
<button className="btn btn-danger" onClick={logout}>Logout</button>
</div>
</div>
)
}
export default Home
CodePudding user response:
You can check this in the useEffect method if the token is there then getuser otherwise navigate to the login page
useEffect(()=>{
if(!localStorage.getItem("token")){
navigate("/login");
}else{
getUser();
}
},[]);
CodePudding user response:
You shouldn't add your if
statement outside of a function, as suggests this website. if
statements can only be used outside of a function for conditional rendering (i.e. when the if
statement returns something).
When you want to check something only once, you should check it inside of useEffect
.
For your example, it should be:
useEffect(() => {
getUser()
if(!localStorage.getItem("token")) {
navigate("/login");
}
}, [])