next.jsとfirebaseでのログイン認証判定をしたく色々調べていたのですが、
ほとんどがuseEffect内でログインずみかどうかを判定している記事ばかりでした。
副作用があるものをuseEffectで取得するのはわかるのですが、
ログイン判定にuseEffectを使用した場合、ログイン済もしくは未ログイン判定が初期レンダリングの後に実行され、本来表示されるべきもの以外が表示されると思うのですが、どうしてuseEffectを使用してログイン判定をしているのでしょうか?
下記が一例にな利ます。
import React, { useEffect, useState } from "react"; import { app } from "../base.js"; // contextの作成 export const AuthContext = React.createContext(); export const AuthProvider = ({ children }) => { const [currentUser, setCurrentUser] = useState(null); // ユーザーをログインさせる関数 const login = async (email, password, history) => { try { await app.auth().signInWithEmailAndPassword(email, password); history.push("/"); } catch (error) { alert(error); } }; // 新しいユーザーを作成しログインさせる関数 const signup = async (email, password, history) => { try { await app.auth().createUserWithEmailAndPassword(email, password); history.push("/"); } catch (error) { alert(error); } }; useEffect(() => { app.auth().onAuthStateChanged(setCurrentUser); }, []); return ( // Contextを使用して認証に必要な情報をコンポーネントツリーに流し込む。 <AuthContext.Provider value={{ login: login, signup: signup, currentUser }} > {children} </AuthContext.Provider> ); };
useEffectに入れない場合initializeのエラーが出るので、どうしてもuseEffectを使用しないといけない状態でした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/01/11 09:05
2021/01/11 09:06
退会済みユーザー
2021/01/11 09:09 編集
2021/01/11 09:13
退会済みユーザー
2021/01/11 09:16