悩み
ReactでSign Outはできるようになったのですが、
サインアウト後、ルートパスが、切り替わりません。
ReactアプリはSPAなのでFirebaseなどWebデプロイした時
ルート「'/'」以外のパスにリダイレクトするとNot Foundになってしまいます。
どうすればサインアウト後ルート「'/'」にリダイレクトできるでしょうか?
例.
https://www.ドメイン.jp/
↓
Reactのルーティング
[userページ]
https://www.ドメイン.jp/user
→ ここでサインアウト
ページはサインインに遷移するが
https://www.ドメイン.jp/userのまま
やったこと
firebase.auth().signOut()
後、then
でhistory.push('/');
jsx
1// ...省略 2() => firebase.auth().signOut().then((history) => { 3 history.push('/'); 4}) 5// ...省略
jsx
1// ...省略 2 3const SignOut = () => { 4 5 const user = firebase.auth().currentUser; 6 7 return( 8 <React.Fragment> 9 {user != null && 10 <div 11 className="sign-out" 12 onClick={ 13 () => firebase.auth().signOut().then((history) => { 14 history.push('/'); 15 }) 16 .catch((error) => { 17 console.log(`ログアウト時にエラーが発生しました (${error})`); 18 }) 19 } 20 > 21 <SignOutStyle 22 src={ SignOutIcon } 23 alt="Sign out" 24 /> 25 </div> 26 } 27 </React.Fragment> 28 ); 29} 30 31export default SignOut; 32 33// ...省略
コンソール結果
console
1ログアウト時にエラーが発生しました (TypeError: Cannot read property 'push' of undefined)
history.push を使うには withRouter が必要だと思います。
https://qiita.com/junara/items/a4a98c27dc23fd53ebb9
https://www.techscore.com/blog/2017/12/01/where_does_react-router-history_come_from/
withRouterにしてもサインアウト後history.push('/');は同様のエラーになりました。
ただ、以下の悩みである
「FirebaseなどWebデプロイした時ルート「'/'」以外のパスにリダイレクトするとNot Foundになってしまいます。」のこの部分は、BrowserRouterではなくHashRouterにしたらURLに「#」はつくもののWebデプロイした場合でもNot Found出ることはなくなりました。
ちなみにHashRouterに関してデメリットはないでしょうか?
VueだとhashモードではSEOに難点があると言われていますが。
回答1件
あなたの回答
tips
プレビュー