React は Vue とは異なります。ルートにメタ文字を設定することでルートインターセプションを実装します。 Vue を使用する場合、フレームワークはルーティング ガード関数を提供します。これは、特定のルートに入る前に検証作業を実行するために使用されます。検証が失敗すると、Vue の beforeEnter 関数のように、404 ページまたはログイン ページにジャンプします。 ... router.beforeEach(async(to, from, next) => { 定数 toPath = to.path; 定数 fromPath = from.path; }) ... ルーティングインターセプションを実装するためのReactの基本的な考え方は、Routeのrender関数を使用することです。インターセプションは、インターセプション条件を判断してさまざまなコンポーネントのジャンプを実現することによって実現されます。以前のバージョンでは、React Router も同様の onEnter フックを提供していましたが、React Router 4.0 ではこのメソッドは廃止されました。 React Router 4.0 以降では宣言型コンポーネントを使用します。ルーターはコンポーネントです。ルーティングガード機能を実装するには、自分で記述する必要があります。 'react' から * を React としてインポートします。 'react-router-dom' から { HashRouter、Switch、Route、Redirect } をインポートします。 「./page/index」からIndexをインポートします。 「./page/home」からHomeをインポートします。 「./page/error」からErrorPageをインポートします。 「./page/login」からログインをインポートします。 エクスポートconstルーター = () => ( <ハッシュルーター> <スイッチ> <ルートパス="/" 正確なコンポーネント={インデックス}/> <ルート パス="/login" 正確なコンポーネント = {ログイン}/> <ルート パス="/home" 正確なコンポーネント={Home}/> <ルート パス="/404" 正確なコンポーネント = {ErrorPage}/> <リダイレクト先="/404" /> </スイッチ> </ハッシュルーター> ); 上記の Router コンポーネントには 3 つのページが含まれています。
まず、ルート ディレクトリ src に routerMap.js ファイルを作成します。コードは次のとおりです。 /** * ルーティングコンポーネントを定義し、auth を true に設定して、ルートに権限検証が必要であることを示します */ 「./pages/Admin」からAdminをインポートします。 「./pages/Login」からLoginをインポートします。 「./pages/Error」からErrorをインポートします。 エクスポートconst routerMap = [ {パス: "/"、名前: "admin"、コンポーネント: Admin、認証: true}、 {パス: "/login", 名前: "ログイン", コンポーネント: ログイン}, {パス: "/error", 名前: "error", コンポーネント: Error}, ]; すべてのルーティング ジャンプは、FrontendAuth 高次コンポーネント プロキシによって完了します。 FrontendAuth.js コンポーネントの実装は次のとおりです。 /** * ルーティングガード検証 */ React をインポートし、{Component} を "react" から取得します。 「react-router-dom」から {Route、Redirect} をインポートします。 クラスFrontendAuthはComponentを拡張します{ // eslint は、次の行に無駄なコンストラクタを無効にします コンストラクタ(props) { スーパー(小道具); } 与える() { 定数 {routerConfig, location} = this.props; const {パス名} = 場所; const isLogin = localStorage.getItem("user"); console.log(パス名、isLogin); console.log(場所); // ログイン状態でログインページ以外、権限チェックを必要としないルートの場合 // ログイン後はログインページにジャンプできないため // この部分のコードは、非ログイン状態で権限チェックを必要としないルートにアクセスするためのものです const targetRouterConfig = routerConfig.find( (item) => item.path === パス名 ); コンソールにログ出力します。 targetRouterConfig が targetRouterConfig.auth であり、isLogin である場合、 const {コンポーネント} = targetRouterConfig; return <ルートの正確なパス={パス名} コンポーネント={コンポーネント}/>; } if (ログイン) { // ログインしている場合は、ログインページにジャンプしてホームページにリダイレクトします if (pathname === "/login") { <Redirect to="/"/> を返します。 } それ以外 { // ルートが正当な場合は、対応するルートにジャンプします if (targetRouterConfig) { 戻る ( <ルート パス = {パス名} コンポーネント = {targetRouterConfig.component} /> ); } それ以外 { // ルートが不正な場合は、404 ページにリダイレクトします。 return <Redirect to="/error"/>; } } } それ以外 { // 非ログイン状態で、ルートが正当であり、権限の検証が必要な場合は、ログインページにジャンプしてログインを要求します。if (targetRouterConfig && targetRouterConfig.auth) { <Redirect to="/login"/> を返します。 } それ以外 { // ログインしていない状態で、ルートが不正な場合は404にリダイレクトします <Redirect to="/error"/> を返します。 } } } } デフォルトのFrontendAuthをエクスポートします。 次に、Router コンポーネントを定義します。App.js では、このコンポーネントは高階コンポーネントによってラップされた結果です。 './App.less' をインポートします。 React をインポートし、{Fragment} を "react" から取得します。 'react-router-dom' から {Switch} をインポートします。 「./FrontendAuth」からFrontendAuthをインポートします。 「./routerMap」から {routerMap} をインポートします。 関数App() { 戻る ( <断片> 1 つだけ一致させ、一致が成功した場合はそれ以上一致させないため、効率が高くなります*/ <スイッチ> <フロントエンド認証 routerConfig={routerMap}/> </スイッチ> </フラグメント> ); } デフォルトのアプリをエクスポートします。 テスト これで、React Routing Guard (ルートインターセプション) の実装に関するこの記事は終了です。React Routing Guard に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: MySql の知識ポイント: トランザクション、インデックス、ロックの原則、使用状況の分析
目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...
これは、CSS 3.0 で実装されたテキストのホバーとジャンプ効果です。効果は次のとおりです。 以下...
現象: divを一定の振幅で円、楕円などに変更する方法: CSSのborder-radiusプロパテ...
目次Tomcat の紹介Tomcat の展開Web プロジェクトの作成tomcatの設定プロジェクト...
目次1. ヘルプ情報を使用する2. データベースの作成、削除、表示3. データベースに接続する4. ...
本から学ぶことは常に浅はかで、これがさらなるダウンタイムを引き起こすことには決して気づきません......
目次ヘッドレスブラウザとは何ですか?なぜ「ヘッドレス」ブラウザと呼ばれるのでしょうか?ヘッドレスブラ...
1. テスト環境名前バージョンセント7.6ドッカー18.09.06 2. オンラインインストールここ...
ディスクを自動的に検出する構成キーの値注: このキー値は Linux プラットフォームでのみサポート...
1. CentOS 7 と CentOS 8 のネットワーク構成の違い: VMware Workst...
elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...
Baiduのインタビューで遭遇する質問は、次のレイアウト効果を達成する必要がある。 中央の紫色の列...
1 要件の概要MySQL5.6本番データベースの複数のテーブルのデータは、Oracle11gデータウ...
目次序文プレビュー文章グラフィックコンポーネントプロパティ機能グリッドを描く軸角度を計算するスケール...
IDEA は Java で最も一般的に使用されている開発ツールであり、Docker は最も人気のある...