React Router v6 でクラスコンポーネントを使用してプログラムでリダイレクトする方法は?

Patricia Arquette
リリース: 2024-11-01 06:55:30
オリジナル
143 人が閲覧しました

How to Programmatically Redirect in React Router v6 with Class Components?

React Router v6 のルートにプログラムでリダイレクトする際の問題

問題

TypeError が発生する: 未定義のプロパティを読み取れません ('push' を読み取っています) ) クラス コンポーネントで useNavigate フックを使用して移動しようとしているときに発生します。

原因

React Router v6 では、useNavigate は関数コンポーネントとのみ互換性があります。これをクラス コンポーネント (AddContacts) で使用しようとすると、未定義のままになり、エラーが発生します。

解決策

この問題を解決するには、2 つのオプションがあります:

1. AddContacts を関数コンポーネントに変換

AddContacts クラス コンポーネントを関数コンポーネントにリファクタリングします。これにより、関数内で useNavigate フックを直接使用できるようになります。

2.カスタム withRouter HOC (高次コンポーネント) を使用する

カスタム withRouter HOC を作成して、useNavigate を含むルート プロパティを AddContacts コンポーネントに挿入します。

カスタム withRouter HOC の例を次に示します:

const withRouter = (WrappedComponent) => (props) => {
  const navigate = useNavigate();

  return (
    <WrappedComponent
      {...props}
      navigate={navigate}
    />
  );
};
ログイン後にコピー

次に、AddContacts コンポーネントを HOC で装飾します。

export default withRouter(AddContacts);
ログイン後にコピー

これにより、navigate prop が AddContacts コンポーネントに渡され、期待どおりに使用できるようになります。

ナビゲーション API の変更に関する注意

React Router v6 では、ナビゲーション API が変更されました。履歴オブジェクトは直接使用されなくなりました。代わりに、1 つまたは 2 つの引数を取るナビゲート関数があります。ターゲット パスと、置換または状態のオプションの「オプション」オブジェクトです。

プログラムでナビゲートするには、次の構文を使用します。

this.props.navigate('/');
ログイン後にコピー

以上がReact Router v6 でクラスコンポーネントを使用してプログラムでリダイレクトする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!