前提・実現したいこと
現在react-router v5とreduxを使ったECサイト作成のチュートリアルを進行中です
チュートリアルではract-router v5を使っていますが個人的にv6を使ってみたかったので逐一置き換えています
大体の部分は何とかなるのですがuseEffect内で条件分岐を使ってリダイレクトをする処理をv6でやるとエラーが起きてしまいます
v6でこういった処理をするにはどのように実装すればいいでしょうか
発生している問題・エラーメッセージ
Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: 1. You might have mismatching versions of React and the renderer (such as React DOM) 2. You might be breaking the Rules of Hooks 3. You might have more than one copy of React in the same app See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
Hooksを条件分岐内で使うなってことなんでしょうけど他に手段が思いつかないです。。
該当のソースコード
react-router v5を使った元のコードです
ログイン処理をするとそれをuseEffectが検知してリダイレクトする仕組みです
v5
1 const redirect = location.search ? location.search.split("=")[1] : '/'; 2 const userSignin = useSelector(state => state.userSignin); 3 const {userInfo} = userSignin 4 5 useEffect(() => { 6 if (userInfo) { 7 props.history.push(redirect); 8 } 9 }, [navigate,redirect,userInfo])
react-router v6を使ったエラーが起こるコードです
v6
1 const navigate = useNavigate; 2 const redirect = location.search ? location.search.split("=")[1] : '/'; 3 const userSignin = useSelector(state => state.userSignin); 4 const {userInfo} = userSignin 5 6 useEffect(() => { 7 if (userInfo) { 8 navigate(redirect); 9 } 10 }, [navigate,redirect,userInfo])
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/08 02:11