Реагировать, если статусы всегда приводят к ложному условию после повторного рендеринга состояния

У меня есть этот компонент в реакции, который вернет заголовок «Загрузка», заголовок «Вошел в систему» ​​или заголовок «Не вошел в систему», в зависимости от состояния.

Я сделал состояние так, чтобы оно обновлялось и менялось с «Загрузка» на «Вошел в систему» ​​или «Не вошел в систему», как только обещание isLoggedIn возвращает значение либо true, либо false.

Тем не менее, мой второй статус If всегда условно оказывается ложным и, следовательно, всегда возвращает «Не вошел в систему» ​​в качестве заголовка, даже если обещание возвращает true (говоря, что пользователь вошел в систему).

Вот код:

function UserProfileNavItem(props) {
  const [profiledLoaded, sethasLoaded] = useState(false);
  var isLoggedInLocal = false;
  isLoggedIn().then((res) => {
    if (res) {
      console.info("We are logged in");
      isLoggedInLocal = true;
    }else{
      console.info("We are not logged in");
    }
    sethasLoaded(true);
  });
  if (!profiledLoaded) {
    return (
      <h1>Loading</h1>
    );
  }
  if (!isLoggedInLocal) {
    return (
      <h1>Not Logged In</h1> // THIS IS ALWAYS SENT BACK EVEN IF isLoggedInLocal IS TRUE
);
  } else {
    return (
      <h1>Logged In</h1>  // THIS IS NEVER SENT BACK
    );
  }
}

Не думайте, что мне нужно показывать свое isLoggedIn обещание, но спросите, если нужно.

(Да, я новичок, чтобы реагировать)

Что за объект "res"?

sunero4 10.12.2020 23:25

@sunero4 Логическое значение

Nathan 10.12.2020 23:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
735
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Напишите var isLoggedInLocal = false; как состояние, чтобы быть реактивным:

function UserProfileNavItem(props) {
  const [profiledLoaded, sethasLoaded] = useState(false);
const [isLoggedInLocal , setIsLoggedInLocal ] = useState(false);
 
  isLoggedIn().then((res) => {
    if (res) {
      console.info("We are logged in");
      setIsLoggedInLocal(true);
    }else{
      console.info("We are not logged in");
    }
    sethasLoaded(true);
  });
  if (!profiledLoaded) {
    return (
      <h1>Loading</h1>
    );
  }
  if (!isLoggedInLocal) {
    return (
      <h1>Not Logged In</h1> IS TRUE
);
  } else {
    return (
      <h1>Logged In</h1> 
    );
  }
}

Спасибо, это сработало. Я тоже учусь, поэтому просто быстрый вопрос ... все, что нужно повторно отобразить / проверить снова (например, если статус), должно быть в состоянии?

Nathan 10.12.2020 23:30

пожалуйста, да любая переменная, которая кажется важной для компонента, должна быть состоянием

Boussadjra Brahim 10.12.2020 23:32

Большое спасибо, я предполагаю, что react-redux сделает то же самое?

Nathan 10.12.2020 23:33

Да, но для глобального состояния

Boussadjra Brahim 10.12.2020 23:34

Ладно, спасибо за разъяснения. Одобрю ответ, когда смогу.

Nathan 10.12.2020 23:35

Другие вопросы по теме