Вплоть до этого момента не похоже, чтобы у вас был какой-либо код, который проверяет загрузку страницы, если ваш пользователь уже вошел в систему (проверяя куки-файл или запрашивая сервер или что-то в этом роде).Это означает, что каждый раз, когда ваша страница загружается, ваше состояние входа будет соответствовать тому, что вы установили для своего начального состояния.Вы делаете это в вашем App
конструкторе:
this.state = {
userID: 123 // you mentioned in your comments that this is what you used
}
Итак, когда страница первоначально загружается, вот что происходит:
App
конструктор вызываетсяи начальное состояние устанавливается с помощью userID: 123
.Итак, страница загружена пользователем 123, уже вошедшим в систему. Вот почему вы видите панель навигации с доступными «Моя учетная запись» и «Выйти».
Вы нажимаете «Журнал»Из".Это правильно устанавливает userID
в null
.Вы вышли из системы.У вас больше нет «Моего аккаунта» или «Выйти» на вашей навигационной панели.
Вы нажимаете на одну из других навигационных ссылок, например «Связаться с нами». Новая страница загружена. Все начинается заново.
App
конструктор вызывается снова, и исходное состояние снова устанавливается на userID: 123
,Ваш пользователь вошел в систему.
Чтобы это исправить, вы можете начать с установки userID: null
в своем конструкторе.Таким образом, с каждой новой загрузкой страницы пользователь начинает регистрироваться out .Но, в конце концов, вам, вероятно, потребуется встроить код, который поддерживает (в браузере клиента) какой-то файл cookie, который сообщает вашему сайту, что пользователь вошел в систему, и поддерживает это состояние при загрузке одной страницы на другую.
Я создал песочницу с кодом , которая использует предоставленный вами код, но затем добавил некоторые модификации, чтобы помочь продемонстрировать то, что я объяснил выше.В этой изолированной программной среде пользователь начинает выход из системы .Когда вы нажимаете кнопку для имитации входа в систему, пользователь входит в систему. Но если вы нажмете на ссылку панели навигации, которая приведет вас на другую страницу, вы увидите, что пользователь снова вышел из системы.
Отдельно, вы должны заметить, что некоторые из ваших JSX-кодов (в частности, теги <i>
в CustomNavbar.js) используют опору class
- их следует изменить на className
, или иначе Реакт будет жаловаться .