Authでfirebaseから取得したユーザ名を、Dashboardに表示したいです。
ユーザ情報の取得自体はできているのですが、
Dashboard読み込み時にはuseContext内の情報がundefinedとなり、読み込みが完了した時点でuseContextがundefinedからユーザ情報に変わることを確認しています。
この挙動がなぜかわからず解決ができません。
undefinedになってしまうと、表示しようとしている{user}がundefinedとなりエラーになります。
読み込み完了前に、先にデータが反映されるようにするには、どのように記述すれば良いでしょうか?
Dashboard.jsx
const Dashboard = () => { const classes = useStyles(); const [user, setUser] = useState() const currentUser = useContext(AuthContext) useEffect(() => { setUser(currentUser["currentUser"]["displayName"]) }, []); return ( <div> {user} </div> )
Auth.tsx
import { User } from 'firebase'; import { FC, createContext, useEffect, useState, useContext } from 'react'; import firebase from '../utils/Firebase'; type AuthContextProps = { currentUser: User | null | undefined } const AuthContext = createContext<AuthContextProps>({ currentUser: undefined }); const AuthProvider: FC = ({ children }) => { const [currentUser, setCurrentUser] = useState<User | null | undefined>( undefined ); useEffect(() => { // ログイン状態が変化するとfirebaseのauthメソッドを呼び出す firebase.auth().onAuthStateChanged((user) => { setCurrentUser(user); }) }, []); /* 下階層のコンポーネントをラップする */ return ( <AuthContext.Provider value={{ currentUser }}> {children} </AuthContext.Provider> ) } export { AuthContext, AuthProvider }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/09 01:41