フォーム送信時「useRouter()」でリダイレクトができなかった原因。
2022/6/15
2022/6/15
フォーム送信時(onSubmit時)に、いろいろな処理をして、最後にリダイレクトをかける処理をするためにrouter.push()
を活用しようとしました。
ですがrouter.push()
が上手く動作せずに困ったので解決法メモです。
リダイレクトが動作しなかった原因
初歩的なミスで、<form>の動作を理解していなかったことが原因でした。
<form>の送信時には、デフォルトで<form action='〇〇'>
で指定しているURLへリダイレクトがかかります。
下記コードの場合「onSubmitで実行される関数内のrouter.push()」より、「action=’〇〇’へのリダイレクト」が先に起きていました。
問題コード
import {useRouter} from "next/router";
export default function Redirect() {
const router = useRouter();
const handleSubmit = (e) => {
router.push('/post'); // リダイレクトされない
};
return (
<form action='' onSubmit={handleSubmit}> // action=''へリダイレクトする
<input type="text" />
<button type="submit">送信ボタン</button>
</form>
);
};
解決方法
useRouter()でリダイレクトをかけるためには、form action='〇〇'
によるリダイレクト処理を止める必要があります。
formのデフォルト処理を止めるにはe.preventDefault();
が有効です。
解決コード
import {useRouter} from "next/router";
export default function Redirect() {
const router = useRouter();
const handleSubmit = (e) => {
e.preventDefault(); // これでaction=''へのリダイレクト処理がストップできる
router.push('/post');
};
return (
<form action='' onSubmit={handleSubmit}>
<input type="text" />
<button type="submit">送信ボタン</button>
</form>
);
};
最近の記事
音楽生成AI「Suno」の使い方まとめ!作詞作曲が簡単にできる?
簡単に曲が作れるAIということでよく聞く「Suno(Chirp)」についてまとめました。
目次「Suno」とはテキストからさまざまな音声を生成する「Bark」歌詞から曲を生成する「Chirp」...
2023/11/24
2023/11/24
【Open AI】APIの料金まとめ|GPT・DALL·E・Whisperなど
Open AIのAPI(一部)の料金をまとめました。
参考のために日本円は「1ドル150円」で換算をしています。
目次Text generation: テキスト生成Assistants ...
2023/11/22
2023/11/22
【Next.js】Assistants APIの基本的なコードまとめ。
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次Open AIのAPIセットアップ基本の使い方Threads: スレッドを作る...
2023/11/21
2023/11/21
【Next.js】Open AIのAPIでファイルをアップロードする方法。
今回は、Next.jsサイトからOpen AIのAPI(Upload file)で、ファイルをアップロードする方法を実装するのに時間がかかったのでその過程と最終コードをまとめます。(Vercelにデ...
2023/11/21
2023/11/22
「生成系AIのWEBプロダクトTOP50」をまとめてみる。
Andreessen Horowitzが出している記事で紹介されている「AIプロダクトの月間訪問者数ランキングTOP50」のサービスをまとめました。
目次ChatGPTcharacter.ai...
2023/10/3
2023/10/3
【Next.js 13】NextAuth+FireStoreにユーザー情報を保存する。
今回は、以下の3つをNext.js 13で実装するためのメモです。
Googleアカウントでログインできる
アカウント、セッション情報をFirestoreに保存する
サーバーサイ...
2023/7/12
2023/7/12