I have the following code for App.js. The useEffect hook will run at startup of the App, and I expect it to retrieve an object from localStorage and then set it to the useState user variable.
CONSOLE.LOG OUTPUT:
JSON user {"name":"tester","username":"test username","password":"testpassword","token":"test token"}
parsed user {name: 'tester', username: 'test username', password: 'testpassword', token: 'test token'}
current logged in user: null
const App = (props) => {
const [user, setUser] = useState(null);
useEffect(() => {
// CHECK IF THERE IS A LOGGED IN USER FROM PREVIOUS SESSIONS
const loggedUserJSON = window.localStorage.getItem("loggedInUser");
if (loggedUserJSON) {
console.log("JSON user", loggedUserJSON);
const parsedUser = JSON.parse(loggedUserJSON);
console.log("parsed user", parsedUser);
setUser(parsedUser);
}
console.log("current logged in user: ", user);
}, []);
And the following is the event handler for my login component:
const login = async (event) => {
event.preventDefault();
try {
const user = await UserService.login({
username: username,
password: password,
});
window.localStorage.setItem("loggedInUser", JSON.stringify(user));
history.push("/home");
} catch (exception) {
console.log(exception);
}
};
Now I can see that the object goes into the browser's local storage correctly, and I can even properly parse it based on my console.log output. But somehow
setUser(parsedUser);
doesn't work. It gives the default value of null. What makes the setUser to fail?