React.js Локальное хранилище не вызывает правильного повторного отображения

#javascript #reactjs

Вопрос:

Я пытаюсь реализовать простую опцию «запомнить меня» для системы входа в приложение React. Согласно консоли, кажется, что все должно работать правильно. Однако отображаемые выходные данные продолжают отображать экран входа в систему. Вот мой код:

 import React, { useState } from 'react';
import Login from '../Login/Login';
import GroupList from '../GroupList/GroupList';

// Flag to avoid infinite loop
let checkedLogin = false;
function App(props) {

  // State hooks
  const [isLoggedIn, setLoggedIn] = useState(false);
  const [userID, setUserID] = useState(null);

  // Load from session storage
  if("userID" in localStorage amp;amp; !checkedLogin) {
    let newUserID = parseInt(localStorage.getItem("userID"));
    checkedLogin = true;
    loginComplete(newUserID);
  }

  // Callback function for login to update main app
  function loginComplete(newUserID) {

    // Set state variables
    setLoggedIn(true);
    setUserID(newUserID);

    // Save to localStorage
    localStorage.setItem('userID', JSON.stringify(newUserID));
  }


  console.log(userID);
  console.log(isLoggedIn);

  // JSX return
  if(isLoggedIn) {
    return <GroupList 
      API_ROUTE={props.API_ROUTE} 
      userID={userID}
      />

  }else{
    return <Login 
      API_ROUTE={props.API_ROUTE} 
      loginCallback={loginComplete}
      />
  }
}

export default App;
 

И вот что возвращает консоль:

введите описание изображения здесь

Если у кого-нибудь есть какие-либо советы, я буду вам очень признателен. Спасибо.

Ответ №1:

Попробуйте завернуть внутрь useEffect . и нет необходимости создавать другую переменную checkedLogin, которую вы можете использовать isLoggedIn только.

   useEffect(() => {
    // Load from session storage
    if ("userID" in localStorage amp;amp; !checkedLogin) {
      let newUserID = parseInt(localStorage.getItem("userID"));
      checkedLogin = true;
      loginComplete(newUserID);
    }
  }, [newUserID]);