react-router-dom を使用した React でのプログラムによるナビゲーション
2265 ワード
フォームを送信した後、別の場所にリダイレクトしようとしていましたが、開発者コミュニティでその解決策を探していましたが、残念ながら、それらのほとんどは Link コンポーネントを使用する方法のみを示しており、この反応から既に削除されていますversion@6、そして反応ルーターの公式ウェブサイトを見た後、私は答えを得ました.
このブログは主に、この問題に対する答えを探してここに来る人々の避難所になることを目的としています.
useNavigate フック
オプションの 2 番目の { replace, state } 引数を指定して To 値 ( と同じ型) を渡すか、または 履歴スタックに移動するデルタを渡します.たとえば、navigate(-1) は戻るボタンを押すことと同じです.
たとえば、フォームが送信された後.
ロケーション状態で保存するオブジェクト.これは、URL に含まれる必要はないが、ルート遷移に関連付けられている状態に役立ちます.サーバーにデータを「投稿」するようなものだと考えてください.
通常、navigate を呼び出すと、新しいエントリが履歴スタックにプッシュされるため、ユーザーは [戻る] ボタンをクリックしてページに戻ることができます. replace: true を渡して移動すると、履歴スタックの現在のエントリが新しいエントリに置き換えられます.
たとえば、ユーザーが「購入」ボタンをクリックしたが、最初にログインする必要がある場合、ログイン後に、ログイン画面を希望のチェックアウト画面に置き換えることができます.その後、戻るボタンをクリックしても、ログイン ページは表示されません.
反応ルーターのウェブサイト Link も確認できます
このブログは主に、この問題に対する答えを探してここに来る人々の避難所になることを目的としています.
useNavigate フック
useNavigate フックは、プログラムでナビゲートできるようにする関数を返します.関数には 2 つのシグネチャがあります.
1.に
たとえば、フォームが送信された後.
import { useNavigate } from 'react-router-dom';
export const SignupForm = () => {
let navigate = useNavigate();
async function handleSubmit(event) {
event.preventDefault();
await submitForm(event.target);
navigate("/success");
}
return <form onSubmit={handleSubmit}>{/* ... */}</form>;
}
2. オプション - 状態
ロケーション状態で保存するオブジェクト.これは、URL に含まれる必要はないが、ルート遷移に関連付けられている状態に役立ちます.サーバーにデータを「投稿」するようなものだと考えてください.
const NewTodo = () => (
<TodoForm
onSubmit={async todo => {
let id = await createNewTodo(todo)
// put some state on the location
navigate("/todos", { state: { newId: id } })
}}
/>
)
const Todos = props => (
<div>
{todos.map(todo => (
<div
style={{
background:
// read the location state
todo.id === props.location.state.newId
? "yellow"
: ""
}}
>
...
</div>
))}
</div>
)
3.オプション - 交換
通常、navigate を呼び出すと、新しいエントリが履歴スタックにプッシュされるため、ユーザーは [戻る] ボタンをクリックしてページに戻ることができます. replace: true を渡して移動すると、履歴スタックの現在のエントリが新しいエントリに置き換えられます.
たとえば、ユーザーが「購入」ボタンをクリックしたが、最初にログインする必要がある場合、ログイン後に、ログイン画面を希望のチェックアウト画面に置き換えることができます.その後、戻るボタンをクリックしても、ログイン ページは表示されません.
navigate("/some/where", { replace: true })
反応ルーターのウェブサイト Link も確認できます
Reference
この問題について(react-router-dom を使用した React でのプログラムによるナビゲーション), 我々は、より多くの情報をここで見つけました https://dev.to/khaledattia/programmatic-navigation-in-react-using-react-router-dom-59dhテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol