Состояние не меняется при использовании эффекта использования и наблюдаемо

#reactjs #react-hooks #observable #use-effect #use-state

#reactjs #react-hooks #observable #use-effect #use-state

Вопрос:

Я регистрирую использование с помощью API, который возвращает JWT. Мой контекст заключается в следующем:

 const currentUserSubject = new BehaviorSubject(JSON.parse(localStorage.getItem('user')));  export const AuthContext = {  login,  logout,   currentUser: currentUserSubject.asObservable(),  get currentUserValue () { return currentUserSubject.value } };  return fetch(apiUrl, requestOptions) .then(response =gt; {  //response = JWT. JWT token is okay.  localStorage.setItem('user', response);  currentUserSubject.next(response); })  

Затем я пытаюсь получить доступ к этим значениям в моем App.js для отображения информации о пользователе и отображения/скрытия параметров меню. Вот что я должен сделать, чтобы:

 import { AuthContext } from 'path...';  const App = () =gt; {  const [user, setUser] = useState({  currentUser: null,  admin: false  });   useEffect(() =gt; {  AuthContext.currentUser.subscribe(x =gt; setUser({  currentUser: x,  admin: x amp;amp; x.role === "admin"  }));     console.log(user);   }, [user.currentUser]);  }  

Это пример ответа от API:

{«nbf»:1639039248,»exp»:1639042848,»iss»:»someurl»,»aud»:»someurl»,»client_id»:»api»,»sub»:»28576342-f931-458a»,»auth_time»:1639039248,»idp»:»local»,»role»:»admin»,»jti»:»values»,»iat»:1639039248,»scope»:[«api»],»amr»:[«pwd»],»token»:»Токен JWT»}

Основная проблема заключается в том, что, когда я вошел в систему, я не могу отобразить меню для роли администратора, а также я печатаю простой {user.admin}, и это значение равно false, пока я не обновлю страницу, а затем изменится на true.

Вот пример сообщений console.log (), которые я получаю:

Когда приложение загружается в первый раз:
{ Текущий пользователь: null, администратор: false }

Когда я вхожу в систему:
{ Текущий пользователь: все ответы от API, администратор: ложь }

После обновления страницы
{ текущий пользователь: весь ответ от API, администратор: true }

Что может быть причиной такого поведения и что я могу сделать, чтобы это исправить?