実現したいこと
ログインユーザーがログイン画面にアクセスした場合、メインメニューページにリダイレクトさせる。その際にその旨を伝えるアラートを表示。
ここまではできているのですが、このアラートが、通常のログアウト状態からのログインでも表示されてしまうため、それを回避したい。
前提
reactアプリをTypeScript、firebase authenticationを使って、ユーザー管理機能を持ったシステムを作っています。
すでにログインしているユーザーのログイン画面への遷移はあるべき挙動ではないため、MainMenuページへのリダイレクトをするという機能を実装中に、以下の意図しない挙動が発生しました。
発生している問題
ログインユーザーに関する求める挙動は、求めるままに実現できました。ログイン中のため、メインメニューに移動します。という旨のアラートが表示され、okボタンを押すとMainMenuへ遷移します。
ですが、ログアウトをし、通常のログインを実行した際に、ログイン自体はできるのですが、ページ遷移直前に先述のアラートが出てしまい、okボタンを押すことでページ遷移がされます。本来、この通常のログインではアラートは必要なく、すぐにログインされて欲しいシーンです。
該当のソースコード
Typescript
1 useEffect(() => { 2 const unsubscribe = auth.onAuthStateChanged((user) =>{ 3 if (user) { 4 navigate("/mainMenu"); 5 alert("ログイン中のため、メインメニューに移動します") 6 } 7 }); 8 return () => { 9 unsubscribe(); 10 } 11 },[]);
試したこと
コードを直接変更したというよりは、useEffectの挙動に関する学習に努めました。現状の解釈としては、第二引数の配列の中に何も指定をしなければ、レンダリング時の一度だけuseEffectが実行されるということがわかりました。
補足情報(FW/ツールのバージョンなど)
firebase authentication
react-router-dom v6.15.?
ログイン機能、ログアウト機能、MainMenuページ等は正常に動いているため、該当する箇所と思われるコードだけを記載させていただきました。質問自体の経験が未熟なため、もし記載した以外に考慮に必要となるコードがあれば教えてください。追記します。
