import axios from 'axios';
我正在使用React Router Dom V6
这里if(!localStorage.getItem("token")){ navigate("/login") }
不工作
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
您可以在useEffect方法中检查这一点,如果令牌存在,则getuser,否则导航到登录页面
useEffect(()=>{
if(!localStorage.getItem("token")){
navigate("/login");
}else{
getUser();
}
},[]);
您不应该在函数之外添加if
语句,正如本网站所建议的那样。if
语句只能在有条件渲染的函数之外使用(即当if
语句返回某些东西时)。当您只想检查一次时,您应该在useEffect
中检查它。对于您的示例,它应该是:
useEffect(() => {
getUser()
if(!localStorage.getItem("token")) {
navigate("/login");
}
}, [])