i have a function in AuthAPI.js
and it has the following code
const isLoggedIn = () => {
const token = localStorage.getItem("token");
return token ? true : false;
};
i want to show login and logout navbar item conditionally, when user logouts and logins
Navlink.js code ->
import React, { useEffect, useState } from "react";
import { NavLink } from "react-router-dom";
import { isLoggedIn } from "../APIHandler/AuthAPI";
import styles from "./NavLinks.module.css";
export default function NavLinks() {
const [isLoggedInState, setIsLoggedInState] = useState(false);
useEffect(() => {
async function init() {
const token = await localStorage.getItem("token");
console.log({ token });
token ? setIsLoggedInState(true) : setIsLoggedInState(false);
}
init();
}, []);
useEffect(() => {
console.log({ isLoggedInState });
if (isLoggedInState == false) {
localStorage.removeItem("token");
}
}, [localStorage]);
const handleLogout = (e) => {
e.preventDefault();
console.log("called handle logout");
// localStorage.removeItem("token");
setIsLoggedInState(false);
};
return (
<>
<li className={styles.main_nav__item}>
<NavLink to="/">HOME</NavLink>
</li>
<li className={styles.main_nav__item}>
<NavLink to="/blogs">BLOGS</NavLink>
</li>
{!isLoggedInState && (
<li className={styles.main_nav__item}>
<NavLink to="/login">LOGIN</NavLink>
</li>
)}
{isLoggedInState && (
<li className={styles.main_nav__item}>
<button onClick={handleLogout} className={styles.logout}>
LOGOUT
</button>
</li>
)}
</>
);
}
here ,when user clicks on logout , the token is being removed, but the component is not loaded to reflect the changes,
how do I reflect the changes in navlink ,when user clicks on logout, it is possible if I use a state variable, but I am using local storage to tell whether user is logged in or not.
I have tried this answer
but it didn't work