質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2079閲覧

react-router v6でHooks can only be called inside of the body of a function component.エラーが起きる

fresh_fish

総合スコア20

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/06/08 00:57

編集2021/06/08 01:00

前提・実現したいこと

現在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/ツールのバージョンなど)

react-dom@17.0.2
react-router@6.0.0-beta.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

javascript

1const navigate = useNavigate();

「フックを呼んで得られた関数を使う」のが正しいのではないでしょうか?

投稿2021/06/08 01:18

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fresh_fish

2021/06/08 02:11

まさかのタイポでした。。 わざわざ答えてくださってありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問