Kentavr16
@Kentavr16
long cold winter

Как заставить реакт правильно обновить компоненты?

На странице входа сайта я использовал код
useEffect(() => {
    if (token) {
      navigate("../cabinet", { replace: true });
    }
  });

Токен хранится в localstorage.
Работает, но есть проблема - в компоненте с навигацией
{token ? (
        <button className="signout" onClick={deleteToken}>Выйти</button>
      ) : (
        <nav>
          <Link to="/registration">регистрация</Link>
          <Link to="/signin">вход</Link>
        </nav>


То есть: при входе перенаправляет в кабинет, но компонент с навигацией все та же содержит линки на регистрацию/вход. Кнопка выхода появляется если перезагрузить страницу.
Как правильно и красиво поправить ситуацию?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
Kentavr16
@Kentavr16 Автор вопроса
long cold winter
вытяжка из комментария -
Best practice - спрятать токен в httpOnly куке, чтоб js не мог его прочесть и авторизовываться просто через куку в хеадере запроса.
Можно вот тут почитать, к примеру https://habr.com/ru/company/ruvds/blog/512866/ (обратите внимание на комментарии)
В любом случае Вам необходимо завести через реакт контекст (к примеру) стор, доступный в любом месте приложения. Оборачиваете всё приложение в контекст провайдер, на первой странице (или при загрузке приложения) запрашиваете какие-либо данные с бэка (данные пользователя например, если авторизация через куку, либо получаете jwt-токен в ответ на ввод логина) сохраняете в переменную в контексте (isAuth например), а в целевом компоненте навигации используете эту переменную как условие выводить одно или другое. Можно вызывать useEffect(() => {какой-то код},[имя переменной]), который будет дергаться только когда "имя переменной" обновится...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы