Estou usando a api Context do React para servir um usuário na minha aplicação inteira. Porém, quando consumo esse contexto ele retorna o valor padrão dele, especificado no createContext
, ao invés do valor do estado que foi associado a ele.
Há certeza de que o estado do usuário está sendo atualizado, visto que o console.log
no App.tsx
imprime as informações corretamente.
O problema que vejo é que o valor do estado não está sendo atualizado no UserContext, mas não sei o porquê disso estar acontecendo.
App.tsx:
import UserContext from './context/user.context';
import useUser from './hooks/useUser.hook';
import Sidebar from './components/Sidebar';
const App = () => {
const { user, setUser } = useUser();
console.log('App:', user) // App: { id: 0, name: 'usuario', ... }
return (
<UserContext.Provider value={{ user, setUser }}>
<Sidebar />
</UserContext.Provider>
useUser.hook.ts:
import { useState, useEffect } from "react";
import request from "../lib/request";
import IUser from "src/utils/interfaces/user.interface";
const useUser = () => {
const [user, setUser] = useState<IUser | null>(null);
const fetchUser = async () => {
const { data } = await request<IUser>({
url: 'auth',
method: 'GET'
});
setUser(data ?? null);
};
useEffect(() => {
fetchUser();
}, []);
return {
user,
setUser
};
};
export default useUser;
user.context.ts:
import { createContext } from 'react';
import type { Dispatch, SetStateAction } from 'react';
import IUser from '../utils/interfaces/user.interface';
type ContextType = {
user: IUser | null,
setUser: Dispatch<SetStateAction<IUser | null>>
};
const UserContext = createContext<ContextType>({
user: null,
setUser() {
return null;
}
});
export default UserContext;
Sidebar.tsx:
import { useEffect, useContext } from "react";
import type { FC } from "react";
import UserContext from "src/context/user.context";
const Sidebar: FC = () => {
const { user } = useContext(UserContext);
useEffect(() => {
console.log('Sidebar user:', user) // Sidebar user: null
}, [user]);
return <aside>...</aside>